【问题标题】:GCC: How to generate line number debug information only?GCC:如何只生成行号调试信息?
【发布时间】: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 但有行号。这可能吗?

最好的问候, 马丁

【问题讨论】:

    标签: c++ debugging gcc compilation


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多