Я пытаюсь автоматизировать некоторые задачи отладки.В некоторых случаях я печатаю значение $ra
[это машина MIPS] и части стека в виде шестнадцатеричных адресов.Во время отладки я использую addr2line
для преобразования их в file:line
пары.
Я хотел бы автоматизировать эту процедуру.
Проблема в том, что addr2line возвращает имя файла, эквивалентноезначение __FILE__
во время компиляции;т.е. имя файла, переданное компилятору.Обычно это foo.c
, иногда src/foo.c
.Поскольку в моем проекте всего несколько сотен каталогов, этого может быть недостаточно для однозначной идентификации файла (может быть 1/foo.c
, 2/foo.c
и т. Д.).Даже если бы он был детерминированным, кажется довольно неэффективным запускать поиск на моем экране для каждого аргумента [я полагаю, я мог бы создать хеш-таблицу и сохранить их, но я хотел бы сохранить это как простой скрипт bash]
GDB, похоже, получил нужный файл.Если я посмотрю на исходный файл с отладочными символами, я также увижу, что сразу после имени файла появляется полный путь к __FILE__
[то есть, если __FILE__
равен src/foo.c
, и он действительно находится в /home/me/projects/something/comp1/src/foo.c
, я увижу /home/me/projects/something/comp1
в файле.Как я могу получить это программно?
Спасибо.