如何访问C++程序中的“addr2line”功能

How do I access the `addr2line` functionality within my C++ program?

本文关键字:addr2line 功能 程序 C++ 何访问 访问      更新时间:2023-10-16

我需要从C++程序中获取addr2line(源文件和函数调用回溯的行)提供的信息。

我知道我可以直接调用addr2line作为子进程,我也知道我可以将addr2line的源代码复制到我的程序中(该程序也是GPL许可的)。但是代码看起来很复杂,我觉得直接使用它不舒服。bfd是什么意思?我更喜欢在C++STL库中使用一些函数,因为这样会更干净。

我在Linux环境中工作。

您可以尝试函数dladdr()。它使用程序的动态符号,而不是调试信息(使用gcc -rdynamic编译程序)。

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

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