1

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

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

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

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

提前致谢。

4

2 回答 2

3

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

于 2012-06-08T02:34:09.447 回答
1

您必须确保您的 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
于 2012-06-08T06:48:13.620 回答