c++ - elf 文件中的 ".debug_info"部分是什么?

标签 c++ elf map-files

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

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

enter image description here

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

最佳答案

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/

相关文章:

c++ - 符号可见性,异常,运行时错误

encoding - ELF 中的 NEEDED 条目是否有标准编码?

linux - 错误/lib/x86_64-linux-gnu/libc.so.6 : version `GLIBC_2.34' not found

Delphi x64 map 文件问题

c - 在 Code Composer Studio 编译器中禁用 64 位除法

delphi - 有什么方法可以在编译时添加 .map 文件作为项目的资源吗?

c# - 计算机如何在类型之间进行转换

c++ - 如何防止 libtorrent 创建具有名称的文件夹?

c++ - 取消引用的 InputIterator 的地址? istream_iterator 的案例

c++ - 将前 n 个字符复制到 std::string