elf 文件中的“.debug_info”部分是什么?

tho*_*han 7 c++ elf map-files

我有一个 elf 文件,在使用 elfparser 分析映射文件和 elf 时,我看到一个名为 .Debug_info 的部分,它占用了最大的内存。

我正在使用 xt-xc++ 为 xtensa DSP 进行编译,我还没有使用 -g 选项,也没有使用 -o2 优化级别。

在此输入图像描述

是否可以在发布版本中删除它?

Emp*_*ian 8

名为 的部分.debug_info,它占用了最大的内存。

请注意,此部分没有SHF_ALLOC标志,因此在运行时不占用任何 RAM(它只占用文件系统中的空间)。当然,如果您使用 ramdisk,那么该部分最终仍然会消耗您的 RAM。

是否可以在发布版本中删除它?

是的:运行时没有任何.debug*部分是必需的,并且所有这些部分都可以安全地剥离。

-g0并且-s选项不起作用。

您可能.debug_*从链接的库中获取部分,而不是从您自己的代码中获取部分。-g编译库时存在,因此构建没有-g0任何效果。

令人惊讶的是,这-s不起作用,但也许你的编译器以不同的方式解释这个标志。

无论如何,您应该使用strip --strip-debug来删除.debug_*部分(注意:这不会删除符号表)。

最佳实践实际上是使用完整的调试信息 ( -g) 编译所有代码,保存完整的调试二进制文件以供事后分析,用于strip --strip-debug制作发布二进制文件,并使用该二进制文件进行实际分发。

如果/当发布二进制文件崩溃并留下核心转储时,拥有(保存的)完全调试完全匹配的二进制文件可以极大地改进您可以进行的事后分析。