【问题标题】:VisualStudio C++ how to make debuginfo reliable in releasemodeVisual Studio C++ 如何在发布模式下使 debuginfo 可靠
【发布时间】:2009-12-15 12:22:11
【问题描述】:

我有一个小问题。我的应用程序在调试模式下运行没有问题,但在发布模式下崩溃。我无法找到问题所在,因为在发布模式下,所有的 Debuginfo 似乎都是无稽之谈。但是 - 有时在其他项目中,调试输出在发布模式下也有效。我必须更改哪些项目设置才能使调试输出在发布时有效?

谢谢!

【问题讨论】:

    标签: visual-studio debugging visual-c++ release


    【解决方案1】:

    即使在发布模式下,“生成调试信息”也应默认设置为“是”。问题是,当您在发布模式下运行时,编译器会优化代码,这使得调试器很难显示正确的变量值(例如,它可能选择将一些变量保留在寄存器中等)。

    对此没有什么可做的,您始终可以使用#pragma optimize ("", off) / #pragma optimize ("", on) 关闭全局或围绕特定功能的优化,但这基本上意味着您再次在调试模式下运行并且崩溃可能会消失...

    如果您习惯于阅读汇编代码,则可以切换到反汇编模式,并通过一些调查找到变量的正确值。

    【讨论】:

    • 嗯,这里的一切都是正确的。但是,我看不出关闭优化如何帮助解决崩溃的真正原因?
    • @Gregory 不,你是对的,它可能不会帮助你找到崩溃。这只是一个如何使显示的变量可靠的示例,但正如我所写的那样,崩溃可能会消失。
    • 崩溃可能会消失,而不是它的原因:)
    【解决方案2】:

    很可能,您正在使用未初始化的变量。

    在您的项目设置中,设置

    Configuration Properties > C/C++ > General > Debug Information Format

    Program Database

    然后,设置

    Configuration Properties > Linker > Debugging > Generate Debug Info

    Yes

    古老的“使用跟踪调试”方法可以帮助您大致了解问题出在哪里。然后再次阅读这部分代码并追踪未初始化的变量。

    【讨论】:

    • 您好,谢谢!这些设置已经设置。我还设置了 /ASSEMBLYDEBUG - 但调试输出仍然无效
    • 尝试重建您的项目以确保 pdb 同步?
    • 我当然做到了——但还是一样。我可以跟踪传递的函数属性,但是对于所有局部变量,我得到 CXX017 Symbol "variablename" not found
    • @Mat 这是因为在发布模式下 VC 选择将其保存在寄存器中,请参阅我的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多