如何访问C++程序中的“addr2line”功能
How do I access the `addr2line` functionality within my C++ program?
我需要从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
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 询问在设计我的手臂模拟器功能表示格式1
- 功能原型的目的
- 如何访问C++程序中的“addr2line”功能