【发布时间】:2009-12-15 12:22:11
【问题描述】:
我有一个小问题。我的应用程序在调试模式下运行没有问题,但在发布模式下崩溃。我无法找到问题所在,因为在发布模式下,所有的 Debuginfo 似乎都是无稽之谈。但是 - 有时在其他项目中,调试输出在发布模式下也有效。我必须更改哪些项目设置才能使调试输出在发布时有效?
谢谢!
【问题讨论】:
标签: visual-studio debugging visual-c++ release
我有一个小问题。我的应用程序在调试模式下运行没有问题,但在发布模式下崩溃。我无法找到问题所在,因为在发布模式下,所有的 Debuginfo 似乎都是无稽之谈。但是 - 有时在其他项目中,调试输出在发布模式下也有效。我必须更改哪些项目设置才能使调试输出在发布时有效?
谢谢!
【问题讨论】:
标签: visual-studio debugging visual-c++ release
即使在发布模式下,“生成调试信息”也应默认设置为“是”。问题是,当您在发布模式下运行时,编译器会优化代码,这使得调试器很难显示正确的变量值(例如,它可能选择将一些变量保留在寄存器中等)。
对此没有什么可做的,您始终可以使用#pragma optimize ("", off) / #pragma optimize ("", on) 关闭全局或围绕特定功能的优化,但这基本上意味着您再次在调试模式下运行并且崩溃可能会消失...
如果您习惯于阅读汇编代码,则可以切换到反汇编模式,并通过一些调查找到变量的正确值。
【讨论】:
很可能,您正在使用未初始化的变量。
在您的项目设置中,设置
Configuration Properties > C/C++ > General > Debug Information Format
致Program Database
然后,设置
Configuration Properties > Linker > Debugging > Generate Debug Info
致Yes
古老的“使用跟踪调试”方法可以帮助您大致了解问题出在哪里。然后再次阅读这部分代码并追踪未初始化的变量。
【讨论】: