有没有人在使用gcc编译器时尝试混合-g(调试符号)和-O2(最佳安全优化)?
我必须调试一个分发给最终用户的发布程序崩溃的问题,他们可能会把core文件发送给我。
我一直都习惯于这样调用:
gdb << myprogram >> << core file >>
并查看问题所在。现在我只能看到函数调用跟踪,但由于没有调试符号,我遇到了很多麻烦。
有任何想法吗?
有没有人在使用gcc编译器时尝试混合-g(调试符号)和-O2(最佳安全优化)?
我必须调试一个分发给最终用户的发布程序崩溃的问题,他们可能会把core文件发送给我。
我一直都习惯于这样调用:
gdb << myprogram >> << core file >>
并查看问题所在。现在我只能看到函数调用跟踪,但由于没有调试符号,我遇到了很多麻烦。
有任何想法吗?
它运行良好。
但是,由于优化的原因,有时候通过调试器跟踪的源代码与实际源代码不完全匹配,但是我认为,即使出现这种情况,拥有调试符号仍然能够使调试更加容易。
-g
对代码本身没有任何影响,只会生成额外的调试数据。 - R.. GitHub STOP HELPING ICE我们在生产环境中同时使用两者,如果客户只看到了一次崩溃,这使得调试变得容易得多。它可以让您对问题的位置有一个相当好的想法(而不是内存损坏)。
理论上,添加-g不应该真正影响性能,尽管可执行文件会变大。在嵌入式环境中,这是一个很大的折衷。