Таким образом, при условии, что источник ошибки может быть расположен в одном (или нескольких) исходных файлах, простейшим способом достижения сравнительных путей выполнения кода представляется сценарий 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 (предложено выше). Но это может помочь лучше ограничить ваш вывод подозрительной областью кода.