GCC:如何只生成行号调试信息?

Posted

技术标签:

【中文标题】GCC:如何只生成行号调试信息?【英文标题】:GCC: How to generate line number debug information only? 【发布时间】:2013-07-28 11:26:51 【问题描述】:

我想提高大型项目的构建速度。 opt build 使用 -O2 -g 编译。我注意到如果没有 -g,编译会变得更快,大约 10-20%。生成的二进制文件有足够的信息来分析崩溃,除了行号。有没有办法只包含行号信息?

根据http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html,行号仅在级别 2(即 -g2 或 -g 的默认值)或更高级别生成。但是根据这个http://gcc.gnu.org/wiki/DebugFission,行号只是调试信息的一小部分(1%)。所以对我来说,最好有 -g0 或 -g1 但有行号。这可能吗?

最好的问候, 马丁

【问题讨论】:

【参考方案1】:

谷歌搜索 Matthieu 提到的 Clang 选项,我找到了一个 gcc 补丁,它可以满足我的需求。它已提交到主干,但两年后一直处于未决状态。这意味着普通的 GCC 无法做到这一点,但有了这个补丁,它可以使用选项“-gmlt”来做到这一点

http://old.nabble.com/-patch--Add-new--gmlt-option-for-min.-debug-info-with-line-tables-%28issue4440072%29-td31482851.html

【讨论】:

干得好!我也尝试用谷歌搜索该选项,但在 gcc 中没有得到任何东西。遗憾的是,补丁仍在等待中,您可能想修改它/表达您对它的兴趣。【参考方案2】:

你会不会弄错了?我知道Clang 支持-gline-tables-only,但据我所知gcc 不支持;确实支持-g1,但是没有线路信息。

【讨论】:

感谢您的提示。我还发现这个补丁提交给 gcc,它允许 gcc 做同样的事情,但是它似乎已经有一段时间了。 有没有办法去除 GCC 生成的过多调试信息?例如,.debug_str 部分中的许多字符串是不必要的,但文件名和函数名也在那里,所以我们不应该剥离整个部分。【参考方案3】:

时间已经过去了。

GCC 知道包含带有-g1 的行号。

您还可以再添加两个选项以节省更多空间:-g1 -gz -gsplit-dwarf

【讨论】:

以上是关于GCC:如何只生成行号调试信息?的主要内容,如果未能解决你的问题,请参考以下文章

尽管安装了 debuginfo,但 GDB 不显示行号信息

是否有 GCC 编译指示可以覆盖某些代码段的调试信息 (-g) 的生成?

gcc编译选项总结

gcc编译选项总结

20145234黄斐《信息安全系统设计基础》GDB调试汇编堆栈过程分析

linux下如何使用gdb调试