【问题标题】:Debugging c++ core files for released software调试已发布软件的 c++ 核心文件
【发布时间】:2011-04-06 14:51:15
【问题描述】:

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

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

有没有办法在不影响我发布的软件的大小或性能的情况下解决这个问题(这就是问题所在)?这是一个大型应用程序,调试版本的性能可能无法为客户所接受。我已经查看了构建一次(调试)的建议,然后剥离符号表并将其作为发布版本发布,但我会看到这种方法的性能受到影响,不是吗?

对于他们已经尝试或当前使用的解决此问题的方法,是否有人提出建议? 谢谢!

【问题讨论】:

    标签: c++ debugging gcc symbol-tables core-file


    【解决方案1】:

    您可以在启用优化的情况下编译和链接,但仍会生成调试符号 (-O3 -g),然后提取调试符号。这样,您将拥有调试符号,但可以在没有它们的情况下发布,并且您不会有性能损失或其他东西。请参阅How to generate gcc debug symbol outside the build target? 了解如何执行此操作。

    【讨论】:

    • 谢谢,我想这就是我要找的。开启优化后,由于内联等问题,我可能仍然无法调试,但总比没有好,对吧?同样作为后续,如果我使用 -g 和 -s 进行编译,这两个选项是否会有效地相互抵消,或者 -s 是否不会删除使用 -g 添加的所有内容?
    • @ndtrek07:好问题,我认为-s 确实取消了-g,因为它说“字符串不必要的符号”,其中包括调试符号。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多