debugging 仅在释放模式下发生错误

ndasle7k  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(91)

我的应用程序只是在释放模式下关闭。我甚至看不到调用堆栈。我想这一切都不知何故打破了。
而且它在调试模式下工作正常。有什么问题吗?或者我怎么能知道问题出在哪里?
另一个问题是,我想尝试调试模式,并使用未初始化的变量。我的意思是,据我所知,在调试模式下,所有的变量都被正确地初始化了(这对吗?)。但不是在释放模式下。因此,我想尝试调试模式,而不是自动初始化模式。这可能吗?
我正在使用VS2010,c++,directX,Windows 7。谢谢

zqry0prt

zqry0prt1#

请尝试禁用优化,然后重试
99%的情况下,你的一些变量没有初始化,请仔细检查。

ifmq2ha2

ifmq2ha22#

在调试模式下,变量没有被初始化,它们被填充了一个值,这个值被选择为在使用时会给你带来麻烦(非零,高到经常导致溢出),并且是可识别的。
我的应用程序只是在释放模式下关闭
你需要先确定它是什么类型的关闭。是崩溃、中止还是关闭?将断点放在所有可能的退出点(包括规则的,如WM_CLOSE)和不规则的,如_abort
如果没有命中断点,至少在这里复制调试输出,看看主线程是如何终止的(结果代码或任何可以给予更多信息的东西)。
要总结调试和发布之间的区别,请执行以下操作:

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

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

相关问题