Понимание блоков в файлах gcov - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь понять вывод инструмента gcov. Выполнение с опциями -a имеет смысл, и вы хотите понять параметры покрытия блоков. К сожалению, трудно понять, что делают блоки и почему они не взяты. Ниже вывод.

Я однажды запустил функцию add в моей программе калькулятора. Понятия не имею, почему он показывает block0.

        -:    0:Source:calculator.c
        -:    0:Graph:calculator.gcno
        -:    0:Data:calculator.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:#include "calculator.h"
        -:    2:#include <stdio.h>
        -:    3:#include <stdlib.h>
        -:    4:
        1:    5:int main(int argc, char *argv[])
        1:    5-block  0
        -:    6:{
        -:    7:    int a,b, result;
        -:    8:    char opr;
        -:    9:
        1:   10:    if(argc!=4)
        1:   10-block  0
        -:   11:    {
    #####:   12:        printf("Invalid arguments...\n");
    $$$$$:   12-block  0
    #####:   13:        return -1;
        -:   14:    }
        -:   15:
        -:   16:    //get values
        1:   17:    a = atoi(argv[1]);
        1:   18:    b = atoi(argv[3]);
        -:   19:
        -:   20:    //get operator
        1:   21:    opr=argv[2][0];
        -:   22:
        -:   23:    //calculate according to operator
        1:   24:    switch(opr)
        1:   24-block  0
        -:   25:    {
        1:   26:        case '+':
        1:   27:            result = add_(a, b);
        1:   27-block  0
        -:   28:
        1:   29:            break;
    #####:   30:        case '-':
    #####:   31:            result=sub_(a,b);
    $$$$$:   31-block  0
    #####:   32:            break;
    #####:   33:        case '_':
    #####:   34:            result=multiply_(a,b);
    $$$$$:   34-block  0
    #####:   35:            break;
    #####:   36:        case '/':
    #####:   37:            result = div_(a,b);
    $$$$$:   37-block  0
    #####:   38:        default:
    #####:   39:            result=0;
    #####:   40:            break;
    $$$$$:   40-block  0
        -:   41:    }
        -:   42:
        1:   43:    if(opr=='+' || opr=='-' || opr=='_'|| opr== '/')
        1:   43-block  0
    $$$$$:   43-block  1
    $$$$$:   43-block  2
    $$$$$:   43-block  3
        1:   44:        printf("Result: %d %c %d = %d\n",a,opr,b,result);
        1:   44-block  0
        -:   45:    else
    #####:   46:        printf("Undefined Operator...\n");
    $$$$$:   46-block  0
        -:   47:
        1:   48:    return 0;
        1:   48-block  0
        -:   49:}
        -:   50:
        -:   51:/**
        -:   52: * Function to add two numbers
        -:   53: */
        1:   54:float add_(float num1, float num2)
        1:   54-block  0
        -:   55:{
        1:   56:    return num1 + num2;
        1:   56-block  0
        -:   57:}
        -:   58:
        -:   59:/**
        -:   60: * Function to subtract two numbers
        -:   61: */
    #####:   62:float sub_(float num1, float num2)
    $$$$$:   62-block  0
        -:   63:{
    #####:   64:    return num1 - num2;
    $$$$$:   64-block  0
        -:   65:}
        -:   66:
        -:   67:/**
        -:   68: * Function to multiply two numbers
        -:   69: */
    #####:   70:float multiply_(float num1, float num2)
    $$$$$:   70-block  0
        -:   71:{
    #####:   72:    return num1 * num2;
    $$$$$:   72-block  0
        -:   73:}
        -:   74:
        -:   75:/**
        -:   76: * Function to divide two numbers
        -:   77: */
    #####:   78:float div_(float num1, float num2)
    $$$$$:   78-block  0
        -:   79:{
    #####:   80:    return num1 / num2;
    $$$$$:   80-block  0
        -:   81:}

Если кто-то знает, как расшифровать информацию о блоке, особенно строки 5, 12, 13, 43, 64, или знает какую-либо подробную документацию о том, что все это означает, я был бы признателен за помощь.

1 Ответ

0 голосов
/ 30 апреля 2019

Каждый блок отмечен строкой с тем же номером строки, что и в последней строке блока, а также номером ветви и вызовов в блоке.Блок создается с помощью пары фигурных скобок ({}).Строка 5 отмечает начало основного блока ... затем упоминается, как я уже говорил, для каждого номера блока вызова ветви или функции ... Теперь ваш оператор if имеет четыре условия, что означает, что будет 4 дополнительных блока, которые помечены как 0,1, 2,3..Все блоки, которые не выполняются, помечены $$$$$, что верно здесь, поскольку вы должны были передать «+» в качестве аргумента, чтобы программа никогда не брала путь других операторов и, следовательно, блок 1, 2,3 помечены как $$$$$.

Надеюсь, это поможет.

...