gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:19 25 4
gpt4 key购买 nike

documentation对于 libc 的回溯相关功能,规定了以下限制。

Note that certain compiler optimizations may interfere with obtaining a valid backtrace. Function inlining causes the inlined function to not have a stack frame; tail call optimization replaces one stack frame with another; frame pointer elimination will stop backtrace from interpreting the stack contents correctly.

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

是否有一种编程方式可以在启用优化的情况下获得正确的回溯?

最佳答案

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

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

关于linux - 尽管进行了优化,我如何以编程方式获得可靠的回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com