admin管理员组

文章数量:1612099

在使用GDB调试C++时遇到过一些很奇怪的问题:
1.GDB断点调试可执行文件或者Dumped Core文件时,无法显示源代码
2.GDB可以显示源代码,但单步调试或者打印局部信息时错误,显示No symbol “xxx” in current context.
在此将排查过程和解决方案梳理并分享如下。

GCC编译选项

先是查找GCC的文档:
Debug Option
最主要的就是这样一行:To tell GCC to emit extra information for use by a debugger, in almost all cases you need only to add -g to your other options.
也就是说gcc需要这个选项把额外的debug信息以特定的格式写入到可执行文件中,这样在使用GDB或者其他调试工具的时候,才能正常调试;文档中还有提到如果你使用了-O的选项的话,编译器会做一些编译优化,这样可能会导致调试时局部变量值不对、程序执行流程不对等问题。文档中推荐在使用-g选项的时候,同时使用-Og可以关闭编译优化。例如g++ main.cpp -g -Og -o a.out
我做到这一步的时候,已经解决了GDB不显示源代码的问题,但另外一个问题又出现了。


本文标签: 信息SymbolgdbquotContext