我有一个elf文件,在使用elfparser分析mapfile和elf时,我看到了一个名为.Debug_info的部分,该部分占用了最大的内存。
我正在使用xt-xc ++为xtensa DSP进行编译,但在给定-o2优化级别的情况下也没有使用-g选项。
是否可以将其删除以用于发布版本?
答案 0 :(得分:1)
称为
.debug_info
的部分,它占用最大的内存。
请注意,此部分没有SHF_ALLOC
标志,因此不在运行时不占用任何RAM(仅占用文件系统中的空间)。当然,如果您使用ramdisk,则该部分最后仍然会花费您RAM。
是否可以将其删除以用于发布版本?
是的:运行时不需要.debug*
部分,并且可以安全地剥离所有这些部分。
-g0
和-s
选项不起作用。
很可能您是从要链接的库中获得.debug_*
节,而不是从自己的代码中获得。 -g
是在编译库时出现的,因此使用-g0
进行编译不会产生任何效果。
令人惊讶的是-s
无法正常工作,但是也许您的编译器以不同的方式解释了此标志。
在任何情况下,都应使用strip --strip-debug
来摆脱.debug_*
部分(注意:这不会删除符号表)。
最佳实践实际上是使用完整的调试信息(-g
)编译所有代码,保存完整的调试二进制文件以进行事后分析,使用strip --strip-debug
制作发布二进制文件,然后使用该二进制文件进行实际分发。
如果/当发行二进制文件崩溃并离开核心转储时,具有(保存的)完全调试的二进制文件完全匹配将极大地改善事后分析能力。