发布模式下的 Windbg 不起作用

Posted

技术标签:

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

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

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

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

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

提前致谢。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于发布模式下的 Windbg 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

STM32 - 中断模式下的 I2C 不起作用

Android 警报管理器 setExactAndAllowWhileIdle() 在打盹模式下的 Android 7.0 Nougat 中不起作用

Redmi 7 上 pdu 模式下的 adb shell cmgs AT 命令不起作用

为啥小写 [i] 在可视块模式下不起作用?

暗模式在带有 Nextjs 和 Typescript 的 Tailwind CSS V3 中不起作用

UWP - 按下的指针不起作用