2011-03-20 79 views
3

我的应用程序仅在发布模式下以某种方式关闭。我甚至无法看到调用堆栈。我想这一切都被打破了。仅在发布模式下发生错误

它在调试模式下工作正常。可能是什么问题?或者我怎样才能找出问题所在?

另一个问题是,我想尝试使用未初始化变量的调试模式。我的意思是,据我所知,在调试模式下,所有的变量都被正确地初始化了(是吗?)。但不是在发布模式。所以我想尝试一下没有自动初始化模式的调试模式。这可能吗?

我正在使用VS2010,C++,directX,Windows 7.谢谢。

+0

您也可以调试内置发布模式的应用程序。只需关闭所有优化,便于调试。 – Dialecticus 2011-03-20 16:42:43

回答

3

在调试模式下,变量未被初始化,它们被填充了一个值,选择该值会导致您在使用时出现问题(非零,经常会导致溢出),并且可以被识别。

我的应用程序以某种方式只在释放模式关闭

您需要确定第一什么样的关闭是它。它崩溃,中止还是关闭?将断点放在所有可能的出口点(既有规则的,如WM_CLOSE),也有不规则的,如_abort。

如果没有命中断点,至少要在这里复制调试输出,看看主线程是如何终止的(告诉结果代码什么的可以给出更多信息)。

总结调试之间的差异,并释放:

  • 调试中初始化错误值动态分配的变量
  • 调试初始化(这是由调试 运行时库,代码生成/运行时库控制完成) (由代码生成/基本运行时检查 -/RTC选项控制)堆栈分配的变量
  • 优化在调试中被关闭(由优化 -/O选项控制)
  • 个不同的宏定义(_DEBUG VS NDEBUG)(由预处理器/预处理器defintions控制)

您可以调整释放模式设置逐个直到“自动关机”匹配调试设置停止。然后你会知道要寻找什么样的问题。

5

尝试禁用优化,然后再试一次它是你的一些变量都没有初始化的时间

99%,检查非常仔细。

相关问题