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

Mr.*_*ate 12 c gcc

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

gdb << myprogram >> << core file >>

并看看问题出在哪里.现在我可以看到调用跟踪但没有调试符号我遇到了麻烦.

任何的想法?

jan*_*neb 11

它工作正常.

或者,由于优化,有时您使用调试器的源代码与源完全不匹配,但IMHO尽管具有调试符号使调试更容易.

  • 此外,有时源代码行不按顺序执行,这让我很困惑. (4认同)
  • `-g`对代码没有任何影响,只对生成的其他调试数据有影响. (4认同)

tot*_*phu 7

我们在生产环境中一起使用它们,如果客户只看到一次崩溃,这使得调试变得更容易.它可以让你很好地了解问题所在(不是内存损坏).

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

  • 只有调试器才需要带符号的图像.如果您正在使用远程调试器或从核心文件进行事后调试,则目标上运行的图像可能会从中删除符号. (5认同)