Получение последовательности информации о выполненных строках Gcov - PullRequest
0 голосов
/ 30 апреля 2018

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

Проблема в том, что я не могу получить последовательность выполненных строк. Давайте использовать эту программу в качестве примера:

//...
for(i = 0; i < n; i++) { // line 8
    if(a > b) { // line 9
        // do something (line 10 - 15)
    } else { // line 16
        // do something (line 17 - 20)
    }
}
//...

Например, при вводе x тело цикла будет повторяться дважды, где ветвь true if выполняется на первой итерации, а затем ветвь false на второй итерации. В этом примере информация о последовательности выполненных строк, которую я хочу получить, будет выглядеть примерно так: ...-8-9-10-11-12-13-14-15-8-9-17-18-19-20-....

С Gcov я не могу получить упомянутую выше информацию, потому что файл .gcov покажет только, что все строки из обеих ветвей выполнены. Я никак не могу выяснить последовательность, выполняются ли сначала строки 10-15 или 17-20.

Есть ли способ получить последовательность выполненных строк с помощью Gcov? Или есть ли альтернативы делать это? Спасибо

1 Ответ

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

gcov-fprofile-arcs) только хранят и обрабатывают необработанные числа, информация о ветвях отсутствует. Данные, которые вы ищете, просто недоступны.

American Fuzzy Lop имеет другую форму инструментовки, которая охватывает некоторую информацию, связанную с путями. См. техническое описание . Вы не говорите, чего на самом деле хотите достичь, поэтому, возможно, этого достаточно.

Если вам нужно перехватить любую форму трассировки выполнения, вы можете использовать скрипт GDB, например:

b main
r
while 1
s
end

Потребуется некоторая пост-обработка, потому что довольно трудно подавить нежелательный вывод GDB. Для более сложного сбора данных вы можете использовать GDB Python интерфейс .

...