23

我需要从 C++ 程序中获取 addr2line 提供的信息(回溯函数调用的文件和行)。是否有类似于 addr2line 的库调用?

编辑:我在 Linux 环境中工作。

我知道我可以直接调用 addr2line 并且我知道我可以在我的程序中使用 addr2line 的源代码(这也是 GPL 许可的)。但我想调用一个库函数,如果它存在的话,会更干净。

编辑:我将使用 binutils 的 bfd,就像 addr2line 一样。bfd 是什么意思呢?

4

2 回答 2

7

查看 addr2line 的 bsd 实现的源代码,它只有大约 400 行代码。将源代码更改为库函数应该很容易。http://sourceforge.net/p/elftoolchain/code/HEAD/tree/trunk/addr2line/addr2line.c

于 2013-02-28T07:18:12.090 回答
6

你可以试试这个功能dladdr()。它使用程序的动态符号,而不是调试信息(用 编译程序gcc -rdynamic)。

此外,您可以检查回溯库或更高级别的堆栈跟踪库。
不完全是您所要求的,但它们可能会被证明是有用的。

于 2012-07-19T08:23:13.807 回答