调试符号稳定性

我正在使用-g选项编译应用程序:

gcc-g-o main1 main.c

然后,我从中剥离调试对象:

objcopy--剥离调试main1

假设我的main1应用程序将崩溃,我想使用一个核心转储coredump1来调试这个问题

我可以再次重建源代码吗

gcc-g-o main2 main.c

并提取调试符号

objcopy--仅保留debug main2 main2.debug

并使用main2.debug调试coredump1

我可以相信调试符号将始终对齐吗?是否有语言标准或编译器要求的保证

如果我的源代码包含基于宏的字符串,例如\uuuuu DATE\uuuuu\uuuu TIME\uuuu,调试符号是否匹配

如果我启用代码优化,它会工作吗

调试符号是否匹配…
如果我启用代码优化,它会工作吗

正如其他人所评论的,您不应该依赖于此,而应该始终使用-g构建,并在装运“调试”之前将调试符号分离出来;最终产品

这就是说,在实践中,这个对GCC1有效,不管有没有优化,但对Clang/LLVM根本不起作用(这给了您一个不依赖它的实际理由)


1或者至少在几年前我上一次尝试使用一些非平凡的二进制文件时是这样

请注意,维护此属性需要编译器开发人员的主动努力,因此,当违规行为被引入、注意和修复时,可能会被破坏

发表评论