В общем, addr2line
лучше всего работает на ELF исполняемых файлов или разделяемых библиотек с отладочной информацией. Эта отладочная информация испускается компилятором, когда вы pass -g
(или -g2
и т. Д.) До GCC. Это особенно обеспечивает сопоставление между расположением исходного кода (имя исходного файла, номера строки, номера столбца) и функций, имен переменных, call stack организации кадра и т. Д. И т. Д. ... Отладочная информация сегодня в формате DWARF (и также обрабатывается gdb
debugger, libbacktrace
library и т. д. и т. д.). Обратите внимание, что отладочная информация содержит пути к исходным файлам (а не исходный файл).
На практике, вы можете (и часто должны) пройти -g
(или -g2
) отладки опцию GCC даже с optimization флагами, как -O2
. В этом случае отладочная информация немного менее точная, но практически применима. В некоторых случаях кадры стека могут исчезать (встроенные вызовы функций, оптимизация хвостовых вызовов, ....).
Вы можете использовать утилиту strip(1) для удаления информации об отладке (и других таблиц символов и т. Д.) С некоторых ELF executable.