интерпретировать вывод gcov для идентификации основных блоков

Я использую gcov с опцией -a (--all-blocks), которая из руководства:

When you use the -a option, you will get individual block counts

Исходный файл:

#include <stdio.h>
#include "file1.h"

int max(int a , int b)
{
  int k = 0;
  if (a > b)
    return a;
  else
    return b;
}

Файл gcov выглядит следующим образом:

    -:    0:Source:file1.c
    -:    0:Graph:file1.gcno
    -:    0:Data:file1.gcda
    -:    0:Runs:1
    -:    0:Programs:1
    -:    1:#include <stdio.h>
    -:    2:#include "file1.h"
    -:    3:
    -:    4:int max(int a , int b)
    1:    5:{
    1:    6:  int k = 0;
    1:    7:  if (a > b)
    1:    7-block  0
    1:    8:    return a;
    1:    8-block  0
    -:    9:  else
    1:   10:    return b;
$$$$$:   10-block  0
    1:   10-block  1
    -:   11:}
    -:   12:
    -:   13:

Я не смог найти никакой информации о формате вывода gcov. Из исходного кода я могу определить 3 основных блока, но gcov имеет только два номера, а также в строке 10 он идентифицирует два блока.


person user847988    schedule 30.08.2013    source источник


Ответы (1)


Номера блоков являются локальными для линии. block 0 в строке 7 означает «блок 0 строки 7» и т. д. Вы имеете block 1 только тогда, когда в строке два или более блоков, как в случае со строкой 10.

Номер блока отображается только в последней строке этого блока.

Таким образом, ваша программа имеет 4 блока, два из них на 10-й строке.

person n. 1.8e9-where's-my-share m.    schedule 30.08.2013
comment
Вы можете определить два блока в строке 10? и что означает этот знак $$$$$ ? - person user847988; 02.09.2013
comment
Один блок является частью else, другой, вероятно, является возвратом из основного (не имеет собственной строки). $$$$$ помечает блоки (не строки), которые не выполняются. - person n. 1.8e9-where's-my-share m.; 02.09.2013
comment
Привет! Мне интересно, можно ли было отобразить это неуклюжее базовое представление блока на уровне исходного кода обратно в код GIMPLE. Вы случайно не знаете, как, если бы это было возможно сделать? - person lllllllllllll; 18.06.2020