[英]Debug symbols stability
我正在使用 -g 选项编译应用程序:
gcc -g -o main1 main.c
然后我从中剥离调试对象:
objcopy --strip-debug main1
让我们假设我的main1
应用程序会崩溃,我想使用核心转储coredump1
来调试问题。
我可以再重建一次源代码吗
gcc -g -o main2 main.c
并提取调试符号
objcopy --only-keep-debug main2 main2.debug
并使用main2.debug
调试coredump1
? 我可以相信调试符号将始终对齐吗? 是否由语言标准或编译器要求保证?
如果我的源代码将包含基于__DATE__
或__TIME__
等宏的字符串,调试符号是否匹配?
如果我启用代码优化,它会起作用吗?
调试符号是否匹配...
如果我启用代码优化,它会起作用吗?
正如其他人所评论的那样,您不应该依赖于此,而是始终使用-g
构建并在交付“最终产品”之前将调试符号分开。
也就是说,在实践中,无论有没有优化,这都适用于 GCC 1 ,但对于 Clang/LLVM 根本不起作用(这给了你一个不依赖于此的实际理由)。
1或者至少在几年前我为几个非平凡的二进制文件尝试过这个时是这样。
请注意,维护此属性需要编译器开发人员的积极努力,因此可能会在引入、注意到和修复违规时被破坏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.