只有发布模式才会出错

问题描述 投票:0回答:2

我的应用程序仅在发布模式下以某种方式关闭。而且我什至看不到调用堆栈。我想这一切都以某种方式坏掉了。

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

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

我正在研究 VS2010、c++、directX、Windows 7。谢谢。

visual-studio-2010 debugging memory
2个回答
6
投票

尝试禁用优化并重试

99%的时候是你的一些变量没有初始化,仔细检查。


4
投票

在调试模式下,变量没有被初始化,它们被填充了一个值,这个值被选择为在使用时给你带来麻烦(非零,高到足以经常导致溢出)并且是可识别的。

我的应用程序仅在发布模式下以某种方式关闭

您需要先确定它是哪种关机。它是崩溃、中止还是关闭?在所有可能的出口点上放置断点(包括常规的,如

WM_CLOSE
)和不规则的,如
_abort
.

如果没有遇到断点,至少在这里复制调试输出,看看主线程是如何终止的(什么结果代码或任何可以提供更多信息的东西)。

总结调试和发布之间的差异:

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

您可以一项一项地调整您的发布模式设置以匹配调试设置,直到“自动关机”停止。然后你就会知道要寻找什么样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.