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

时间:2019-01-14 09:54:41

标签: c++ elf map-files

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

我正在使用xt-xc ++为xtensa DSP进行编译,但在给定-o2优化级别的情况下也没有使用-g选项。

enter image description here

是否可以将其删除以用于发布版本?

1 个答案:

答案 0 :(得分:1)

  

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

请注意,此部分没有SHF_ALLOC标志,因此在运行时不占用任何RAM(仅占用文件系统中的空间)。当然,如果您使用ramdisk,则该部分最后仍然会花费您RAM。

  

是否可以将其删除以用于发布版本?

是的:运行时不需要.debug*部分,并且可以安全地剥离所有这些部分。

  

-g0-s选项不起作用。

很可能您是从要链接的库中获得.debug_*节,而不是从自己的代码中获得。 -g是在编译库时出现的,因此使用-g0进行编译不会产生任何效果。

令人惊讶的是-s无法正常工作,但是也许您的编译器以不同的方式解释了此标志。

在任何情况下,都应使用strip --strip-debug来摆脱.debug_*部分(注意:这不会删除符号表)。

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

如果/当发行二进制文件崩溃并离开核心转储时,具有(保存的)完全调试的二进制文件完全匹配将极大地改善事后分析能力。