2011-03-20 101 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%,檢查非常仔細。

相關問題