2011-04-06 71 views
2

我试图找到一种方法来调试从我的软件发布的版本(使用gcc编译的C++代码)发送给我的核心文件。理想情况下,我希望能够部署发布版本,并保持调试版本用于调试,所以我有符号表等。为发布的软件调试C++核心文件

我的问题是(据我了解)调试和发布版本不能保证是相同的 - 所以当我启动gdb并指向我的调试可执行文件时,来自该字段的核心文件可能看起来像垃圾。

有没有办法解决这个问题(这里有个问题),而不影响我发布的软件的大小和性能?这是一个很大的应用程序,调试版本的性能可能不被客户接受。我已经看过建立一次(调试)的建议,然后去掉符号表并将其作为发布版本发布,但是我将看到用这种方法实现的性能,不是吗?

有没有人有他们已经尝试或目前使用该地址解决这个问题的建议? 谢谢!

回答

3

您可以编译和链接优化打开并仍然生成调试符号(-O3 -g),然后提取调试符号。这样你就可以得到调试符号,但可以在没有它们的情况下发货,并且不会有性能损失或其他问题。有关如何做到这一点,请参阅How to generate gcc debug symbol outside the build target?

+0

谢谢,我想这就是我要找的。开启优化功能后,由于内联等问题,我可能仍然会遇到调试问题,但它总比没有好,对吗? 也作为后续,如果我用-g编译,还有-s,那么这两个选项是否有效地相互抵消,或者不会删除用-g添加的所有内容? – ndtrek07 2011-04-08 17:29:39

+0

@ ndtrek07:好问题,我认为'-s'确实会取消'-g',因为它会显示“字符串不必要的符号”,并且包含调试符号。 – DarkDust 2011-04-08 17:55:29