我编译了这个小型MFC应用程序,当我使用VS2010单击一个CButton时抛出异常。
处于发布模式并创建了pdb文件和地图文件。
然后我使用这些命令,symfix和sympath +让调试器知道符号的位置。在.reload之后我输入了g,点击了异常按钮,它按预期崩溃了,但问题是当我做kb时,它没有显示完整的调用堆栈,而它成功显示其调用堆栈指向异常来自的地方当我在调试模式上编译此应用程序时。
我认为它应该是一个关于编译选项的简单问题,但我显然错过了一些东西。
提前致谢。
答案 0 :(得分:3)
在发布模式下,代码优化已启用,因此编译器会重新排列您的代码并抛出其中的一部分。这可能就是为什么你看不到你期望看到的东西的原因。尝试通过转到Project - >来禁用优化。属性 - >配置属性 - > C / C ++ - >优化 - >优化
答案 1 :(得分:1)
你必须确保你的pdbs有完整的符号,所以你需要在pdb设置中指定不剥离私有符号,这将确保你将获得完整的调用堆栈,optmization设置不应该导致你的问题。
考虑一下,如果未对Windows代码进行优化,那么在调试Windows代码时,如何从符号服务器获取MicroSoft pdb可以正常工作?
有关http://msdn.microsoft.com/en-us/library/958x11bc%28v=vs.90%29.aspx
的更多信息,请参阅此处在您的项目设置下:配置属性>链接器>调试确保'Strip Private Symbols'为空。
您可以输入以下命令确认pdbs是否与您的代码匹配:
!chksym mydll
或执行相同操作的未记录命令:
!itoldyouso mydll