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