我需要从一个addr2line程序中获取由C++程序提供的信息(源文件和从回溯函数调用中返回的行)。
我知道我可以直接调用addr2line作为子进程,我知道我可以将addr2line的源代码复制到我的程序中(这也是GPL许可的)。但是代码看起来很复杂,我不太习惯直接使用它。bfd到底是什么意思?我更喜欢在C++ STL库中使用一些函数,因为这样会更干净。
我在Linux环境中工作。
发布于 2012-07-19 08:23:13
您可以尝试函数dladdr()。它使用程序的动态符号,而不是调试信息(用gcc -rdynamic编译程序)。
此外,您还可以检查回溯库或更高级别的栈迹库。
不完全是你要求的,但它们可能被证明是有用的。
发布于 2013-02-28 07:18:12
查看addr2line的源代码实现,它只有大约400行代码。将源代码更改为库函数应该非常容易。http://sourceforge.net/p/elftoolchain/code/HEAD/tree/trunk/addr2line/addr2line.c
https://stackoverflow.com/questions/11556321
复制相似问题