在gcc中使用-g和-O2选项

在gcc中使用-g和-O2选项,c,gcc,C,Gcc,有人在gcc编译器中混合使用-g(调试符号)和-O2(最佳安全优化)吗? 我必须调试分发给最终用户的发布程序的崩溃,最终用户可以将核心文件发回给我。 我总是打电话给: gdb>> 看看哪里有麻烦。现在我只能看到调用跟踪,但没有调试符号,我遇到了很大的麻烦 有什么想法吗?很好用 或者,由于优化的原因,有时调试器的源代码与源代码并不完全匹配,但尽管如此,使用调试符号可以使调试更加容易。我们在生产环境中同时使用这两种代码,如果客户只看到过一次崩溃,那么调试就容易多了。它可以让您很好地了解问题所在(如果

有人在gcc编译器中混合使用-g(调试符号)和-O2(最佳安全优化)吗?
我必须调试分发给最终用户的发布程序的崩溃,最终用户可以将核心文件发回给我。
我总是打电话给:

gdb>>

看看哪里有麻烦。现在我只能看到调用跟踪,但没有调试符号,我遇到了很大的麻烦

有什么想法吗?

很好用


或者,由于优化的原因,有时调试器的源代码与源代码并不完全匹配,但尽管如此,使用调试符号可以使调试更加容易。

我们在生产环境中同时使用这两种代码,如果客户只看到过一次崩溃,那么调试就容易多了。它可以让您很好地了解问题所在(如果是内存损坏,则不会)


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

此外,有时源代码行的执行顺序会出现问题,这让我开始感到困惑。我已经习惯了调试VC发行版代码时的这种行为。我只是想知道,即使我声明-g,
-g
对代码没有任何影响,只对生成的其他调试数据有影响。带符号的图像仅由调试器需要。如果使用远程调试器或从核心文件进行后期调试,则目标上运行的映像可能会从中删除符号。小结:如果使用ccache加快构建速度,-g(默认情况下)强制ccache不使用源文件的路径,因此,不同目录中的构建不会从缓存中受益。最近的ccache在文档中提供了一些提示来改善这种情况,