【问题标题】:Windbg on release mode doesn't work发布模式下的 Windbg 不起作用
【发布时间】:2012-06-08 02:19:10
【问题描述】:

我编译了这个小型 MFC 应用程序,当我使用 VS2010 单击 CButton 时会引发异常。

它处于发布模式并创建了 pdb 文件和地图文件。

然后我使用这些命令,symfix 和 sympath+ 让调试器知道符号在哪里。 .reload 后我输入 g,单击异常按钮,它按预期崩溃,但这里的问题是当我执行 kb 时,它没有显示完整的调用堆栈,而它成功显示了它的调用堆栈,指向异常来自的位置当我在调试模式下编译这个应用程序时。

我相信编译选项应该是一个简单的问题,但我显然遗漏了一些东西。

提前致谢。

【问题讨论】:

    标签: c++ debugging mfc windbg


    【解决方案1】:

    在发布模式下,代码优化处于开启状态,因此编译器会重新排列您的代码并丢弃其中的一部分。这可能是您看不到您期望看到的内容的原因。尝试通过转到项目 -> 属性 -> 配置属性 -> C/C++ -> 优化 -> 优化来禁用优化。

    【讨论】:

    • 谢谢。它就是这样工作的。但是随后发布模式变得与调试模式一样,没有任何优化。
    • 嗯,不完全一样,但为了优化。由于异常也发生在调试模式下,因此请使用该异常进行调试。更正后,异常也应该在发布模式下消失。
    • 请注意,您可以基于每个项目或每个文件更改优化设置,并且(使用#pragma)甚至可以基于每行。这种混合并不罕见:您通常在进程中加载​​ Windows DLL,而不关心它们的优化级别。
    【解决方案2】:

    您必须确保您的 pdb 具有完整的符号,因此您需要在 pdb 设置中指定不要剥离私有符号,这将确保您获得完整的调用堆栈,优化设置不应该导致你的问题。

    想一想,如果windows代码没有优化,你在调试windows代码时,怎么能从符号服务器获取MicroSoft pdbs正常工作??

    有关http://msdn.microsoft.com/en-us/library/958x11bc%28v=vs.90%29.aspx的更多信息,请参阅此处

    在您的项目设置下:Configuration Properties > Linker > Debugging 确保“Strip Private Symbols”为空。

    您可以通过输入以下内容来确认 pdb 是否与您的代码匹配:

    !chksym mydll
    

    或执行相同操作的未记录命令:

    !itoldyouso mydll
    

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 2022-08-08
      • 2012-09-28
      • 2021-04-28
      相关资源
      最近更新 更多