发布模式下的 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Android 警报管理器 setExactAndAllowWhileIdle() 在打盹模式下的 Android 7.0 Nougat 中不起作用
Redmi 7 上 pdu 模式下的 adb shell cmgs AT 命令不起作用