我是否可以使用与调试符号重新编译的相同二进制文件来调试由C++二进制文件生成的内核而不使用调试符号

Abh*_*Rai 6 c++ gdb

我试图调试由没有调试符号的C++二进制文件生成的核心文件.为了进行有效的调试,我需要调试符号,所以我用-g选项重新编译了相同的代码,以便在重新编译的二进制文件中生成调试符号.我现在可以使用第二个二进制文件调试第一个二进制文件(没有调试符号)生成的相同核心文件(有调试符号,其他一切都相同)吗?

非常感谢 !

Emp*_*ian 5

如果用例如编译原始可执行文件g++ -O2 ...,则不能(正如您可能已经发现的那样)使用构建的新可执行文件g++ -g ...来调试core- GDB需要符号匹配,而它们不会(由于优化级别不同).

可以做的是建立与优化相同的原始新的可执行文件,而且与调试符号:g++ -O2 -g ....

你已经建立了一个新的可执行文件后,运行nm old.a.out > old.nm,nm new.a.out > new.nm和比较输出.它们应该相同或非常接近.

如果是,您应该能够core使用new.a.out 调试old.a.out生成的.

将来,您应该始终使用调试符号构建可执行文件,然后保留完整副本,但是发送没有调试信息的副本:

cp a.out a.out.debug
strip --strip-debug a.out
# a.out is now good to send to customers
# keep a.out.debug for future debugging
Run Code Online (Sandbox Code Playgroud)