我需要从C++程序内获取由addr2line提供的信息(函数调用的回溯源文件和行号)。
我知道可以直接调用addr2line作为子进程,并且可以将addr2line的源代码复制到我的程序中(该程序也是GPL许可)。但这段代码看起来很复杂,直接使用不太舒服。anyway,bfd
的意思是什么?我更愿意使用C++ STL库中的一些函数,因为那样更简洁。
我在Linux环境下工作。
dladdr()
函数。它使用程序的动态符号,而不是调试信息(使用gcc -rdynamic
编译程序)。
此外,您可以检查backtrace库或更高级别的stacktrace库。
虽然不完全符合您的要求,但它们可能会有所帮助。
dladdr()
我只能获取动态链接代码的信息,而且如果我正确理解手册的话,只能获取文件名,无法获取行号。我已经在使用backtrace
获取地址了。现在我需要的是从地址中获取文件和行信息的东西。stacktrace
只是backtrace
的包装器。 - steffenlibunwind
库:http://www.nongnu.org/libunwind/ - Arto Bendiken请查看BSD实现的addr2line源代码,其中只有大约400行代码。将其更改为库函数应该非常容易。http://sourceforge.net/p/elftoolchain/code/HEAD/tree/trunk/addr2line/addr2line.c
bfd
是 http://en.wikipedia.org/wiki/Binary_File_Descriptor_library 的缩写(尽管最初它代表 BFD 的另一种含义 :))。 - ecatmurltrace
查看addr2line
的调用,但你可能不想直接链接到 bfd:http://lists.debian.org/debian-devel/2005/05/msg01086.html - Flexo