0
收藏
微博
微信
复制链接

C++无栈Core Dump,不用死磕GDB调试

2026-07-13 14:06
8

程序随机触发Core Dump,用GDB加载后发现调用栈完全乱掉,看不到任何有效函数信息,根本定位不到崩溃点。这类问题不是调试器故障,是编译和运行环节的几个细节没处理好。

61.png

1. 编译保留调试信息

编译时添加-g选项,同时关闭-O3最高级优化。

高等级优化会把函数栈帧完全裁剪掉,GDB无法回溯完整调用链,保留基础调试信息后就能拿到正常栈。

2. 开启Core文件全映射

执行ulimit -c unlimited命令,解除系统对Core文件的大小限制。

部分大内存程序生成的Core文件会被系统截断,导致栈信息不完整,放开限制后就能生成完整的转储文件。

3. 手动加栈回溯埋点

在程序入口添加信号捕获函数。

崩溃触发时,直接在信号处理函数里打印当前调用栈,不用依赖GDB解析Core文件,就能拿到崩溃时的完整函数路径。

4. 替换无栈编译选项

确认编译脚本里没有添加-fomit-frame-pointer选项。

该选项会主动省略栈帧指针,让GDB完全无法回溯调用链,移除后就能正常解析出完整的崩溃堆栈。


本文凡亿教育原创文章,转载请注明来源!

登录后查看更多
0
评论 0
收藏
侵权举报
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。

热门评论0

相关文章

凡亿教育刘老师

深度武装自己的大脑,为EDA设计事业贡献力量,乐于助人,想要多学习电子设计技术的可以关注我~

开班信息