我有一个 elf 文件,在使用 elfparser 分析 mapfile 和 elf 时,我看到一个名为 .Debug_info 的部分占用了最大的内存。
我正在为 xtensa DSP 编译,使用 xt-xc++,我还没有使用 -g 选项,也给出了 -o2 优化级别。
是否可以为发布版本删除它?
最佳答案
section called
.debug_info
, which is taking largest memory.
请注意,此部分没有 SHF_ALLOC
标志,因此不会在运行时占用任何 RAM(它只占用文件系统中的空间)。当然,如果您使用 ramdisk,那么该部分最终仍然会占用您的 RAM。
is it possible to remove this for release builds?
是的:.debug*
部分在运行时都不是必需的,并且所有这些部分都可以安全地剥离。
-g0
and-s
option didn't work.
很可能您正在从链接的库中获取 .debug_*
部分,而不是从您自己的代码中获取。 -g
在编译库时存在,因此使用 -g0
构建没有任何效果。
令人惊讶的是 -s
不起作用,但也许您的编译器会以不同方式解释此标志。
在任何情况下,您都应该使用 strip --strip-debug
来删除 .debug_*
部分(注意:这不是 删除符号表)。
最佳实践实际上是使用完整的调试信息 (-g
) 编译所有代码,保存完整的调试二进制文件以进行事后分析,使用 strip --strip-debug
制作发布二进制文件,并将该二进制文件用于实际分发。
如果/当发布的二进制文件崩溃并留下核心转储时,(保存)完全调试的完全匹配的二进制文件会大大改进您可以进行的事后分析。
关于c++ - elf 文件中的 ".debug_info"部分是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54179115/