首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管进行了优化,我如何以编程方式获得可靠的回溯?

尽管进行了优化,我如何以编程方式获得可靠的回溯?
EN

Stack Overflow用户
提问于 2018-03-13 02:38:02
回答 1查看 181关注 0票数 1

libc的回溯相关功能的文档声明了以下限制。

注意,某些编译器优化可能会干扰获得有效的回溯跟踪。函数内联导致内联函数没有堆栈帧;尾调用优化将一个堆栈帧替换为另一个堆栈帧;帧指针消除将阻止反向跟踪正确解释堆栈内容。

我还注意到,在用backtrace编译gcc上的大型程序时,-O3函数调用产生的返回地址不正确。然而,尽管进行了优化,gdb似乎仍然能够打印正确的回溯跟踪。

是否有一种编程方法可以在打开优化时获得正确的回溯?

EN

回答 1

Stack Overflow用户

发布于 2019-01-27 07:19:46

backtrace的算法非常原始,因为它依赖于帧指针来恢复堆栈跟踪。因此,除非您用-fno-omit-frame-pointer构建代码(这会损害性能),否则它不会在任何现代平台上工作。

一个更好的选择是使用libunwind或libbacktrace跟踪并使用-funwind-tables进行编译。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49247458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档