You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC无-g发布版中GDB回溯缺失函数帧的原因排查

GCC无调试信息发布版中GDB回溯丢失函数帧的原因?

我之前在Stack Exchange上提问过《In a release build by GCC, i.e., without -g flag, is register info trustable?》,感谢解答后已了解到函数参数对应的寄存器值可能不可靠。

现在调试无-g编译的GCC发布版程序崩溃问题时,发现调用栈存在异常:GDB的backtrace结果里缺失了部分函数调用——根据源码逻辑必然存在的关键帧没有出现在回溯链中。结合模糊的计算机架构知识,函数帧应该存储在内存和特定寄存器(比如程序计数器PC)中,我想知道这是因为这些寄存器损坏了,还是有其他原因导致GDB无法追踪真实调用栈?

更新1:
用layout asm查看汇编时,能看到预期中缺失的函数调用,如下(函数名已替换,寄存器和地址为真实值):

0x210fe9d <OBFUSCATEDiib+894> call 0x210ea10 <_ZTheFuncIAssumedMissed>
0x210fea0 <OBFUSCATEDiib+899> mov %rax,%rdi

但backtrace的结果里确实没有这个函数帧,这让我更困惑了,可能的原因是什么?

更新2:
已确认带-g编译的版本中,GDB可以正常显示完整的调用回溯。

内容的提问来源于stack exchange,提问作者PkDrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:42:02