Как я могу выполнить анализ пути кода в отладчике? - PullRequest
0 голосов
/ 09 ноября 2018

Есть ли отладчики, инструменты, gdb-скрипты, которые можно использовать для анализа пути кода?

Скажем, у меня есть исполняемый файл (в C ++, но вопрос не ограничен языком), который отлично работает с одним вводом и вылетает с другим. Я хотел бы видеть разницу между двумя путями выполнения, без необходимости проходить (или инструмент) через потенциально тысячи строк кода.

В идеале я мог бы сравнить 2 разных потока операторов (C ++) (предпочтительно не ассемблера) и точно определить разницу (и). Может быть, определенная ветвь if берется в одном исполнении, а не в другом и т. Д.

Есть ли способ достичь / автоматизировать это? Заранее спасибо.

1 Ответ

0 голосов
/ 13 ноября 2018

Таким образом, при условии, что источник ошибки может быть расположен в одном (или нескольких) исходных файлах, простейшим способом достижения сравнительных путей выполнения кода представляется сценарий GDB. Вы создаете файл сценария GDB:

set args <arg_list>
set logging off
set logging file <log_file_1>
set logging on
set pagination off
set breakpoint pending on
b <source_file>:<line_1>
commands
frame
c
end
...
b <source_file>:<line_n>
commands
frame
c
end

с преамбулой (все команды set ), а затем с точкой останова + команда для каждой строки в исходном файле (который может быть легко сгенерирован скриптом; не волнуйтесь о пустых или закомментированных строках, они будут пропущены).

Загрузить исполняемый файл в gdb (конечно, правильно с отладочными флагами); source файл сценария gdb выше (назовите его gdb_script.txt) и запустите:

source gdb_script.txt
run

Затем повторите вышеописанный процесс с немного измененным файлом сценария (gdb_script.txt). В частности, измените <arg_list>, чтобы изменить ввод; и установите файл журнала в другой файл <log_file_2>.

Источник и запуск. Затем сравните <log_file_1> с <log_file_2> с вашим предпочтительным инструментом (например, tkdiff).

Это не будет работать лучше, чем gcov (предложено выше). Но это может помочь лучше ограничить ваш вывод подозрительной областью кода.

...