Есть ли библиотечный вызов addr2line?
Мне нужно получить информацию, предоставленную addr2line (файл и строка из обратного вызова вызова функции) из программы С++. Есть ли библиотечный вызов, похожий на addr2line?
edit: Я работаю в среде Linux.
Я знаю, что могу напрямую вызвать addr2line, и я знаю, что я могу использовать исходный код addr2line в моей программе (который также лицензирован GPL). Но я думаю, что вызов библиотечной функции, если она существует, более чистая.
edit: Я буду использовать bfd binutils, как это делает addr2line. Что означает bfd?
Ответы
Ответ 1
Вы можете попробовать функцию dladdr()
. Он использует динамические символы программы, а не информацию для отладки (скомпилируйте программу с помощью gcc -rdynamic
).
Кроме того, вы можете проверить библиотеку backtrace или библиотеку более высокого уровня stacktrace.
Не совсем то, что вы просите, но они могут оказаться полезными.
Ответ 2
Проверьте исходный код реализации bsd для addr2line, он имеет только около 400 строк кода. Изменение источника на библиотечную функцию должно быть очень простым. http://sourceforge.net/apps/trac/elftoolchain/browser/trunk/addr2line/addr2line.c