【问题标题】:Using -g and -O2 options in gcc在 gcc 中使用 -g 和 -O2 选项
【发布时间】:2011-01-14 15:21:16
【问题描述】:

是否有人将 -g(调试符号)和 -O2(最佳安全优化)与 gcc 编译器混合使用?
我必须调试分发给最终用户的发布程序的崩溃,这可能会将核心文件发回给我。
我一直习惯打电话:

gdb > >

看看问题出在哪里。现在我只能看到调用跟踪但没有调试符号我很麻烦。

有什么想法吗?

【问题讨论】:

    标签: c gcc


    【解决方案1】:

    效果很好。

    或者好吧,由于优化,有时您使用调试器单步执行的源代码与源代码不完全匹配,但恕我直言,尽管有调试符号,但调试更容易。

    【讨论】:

    • 另外,有时源代码行的执行顺序混乱,一开始我很困惑。
    • 我已经习惯了这种调试 VC Release 代码的行为。即使我声明 -g...
    • -g 对代码没有任何影响,只会对生成的额外调试数据产生影响。
    【解决方案2】:

    我们在生产环境中同时使用这两种方法,如果客户只看到一次崩溃,调试会容易得多。它可以让您很好地了解问题出在哪里(不是内存损坏)。

    理论上添加 -g 应该不会真正影响性能,尽管可执行文件变大了。在嵌入式环境中,这是一个很大的权衡。

    【讨论】:

    • 只有调试器需要带有符号的图像。如果您使用远程调试器或从核心文件进行事后调试,则在目标上运行的映像可能会从其中剥离符号。
    • 小点:如果你使用 ccache 来加速构建,-g(默认)强制 ccache 不占用源文件的路径,所以在不同目录中构建不会从缓存中受益.
    • 最近的 ccache 在文档中有提示以改善这种情况,ccache.dev/manual/…
    猜你喜欢
    • 2021-07-27
    • 2020-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多