Я пытаюсь автоматизировать отладку, распечатывая входные и выходные данные функции через GDB, когда эта функция срабатывает. Чтобы разрешить установку точек останова в этих местах, я делаю следующее. Я работаю с шаблонами, и rbreak:. не попадает в точки останова функций в моем файле. Итак, я извлекаю номера строк функций из исполняемого файла следующим образом:
- С исполняемым файлом извлекаю номер начала функции;
nm a.out | grep "className" | grep "functionName" | grep "t" | addr2line -e a.out -f | grep "cpp" | uniq
-> this outputs the filename:linenumber
добавить это содержимое в файл .gdb с префиксом b
Запрос - как мы можем извлечь номер строки конца функции из исполняемого файла ?
Имея эту информацию, я могу добавить ее в сценарий GDB, окончательный сценарий будет выглядеть примерно так, как показано ниже. этот скрипт будет загружен в GDB перед выполнением программы.
b filepath:<startline of function>
commands
print input1 input2 etc
continue
end
b filepath:<endline of function>
commands
print output1 output2 etc
continue
end
Осталось найти только конечную строку данной функции , принадлежащую классу / файлу , учитывая исполняемый файл и начальную строку функции
, я также рассматривал возможность использования команды GDBs fini sh, но управление уже вернулось к вызывающей стороне. было бы легко иметь отпечатки внутри вызываемой функции вместо вызывающей, чтобы мы могли контролировать ввод / вывод каждого вызова функции. Это значительно упростит мою отладку.
Любые предложения / комментарии приветствуются. Заранее большое спасибо !!