2009-04-30 43 views
0

我正在使用Win32/ATL創建的應用程序/ GUI。 因此,在調試版本中設計的UI字段(文本字段)能夠正常工作。隨着發佈版本的變化,它看起來像文本字段的寬度是無限的。 它在調試版本中正常工作,但在發行版本中創建問題。 所以我的問題如何相同的代碼可以在調試版本中工作,而不是在發佈版本中工作。 有沒有可能在發佈版本中將其優化爲優化設置? 在發佈版本中,我們將優化設置設置爲Minimum Size,Favor small code。 另外,當我嘗試調試版本構建時,它再次正常工作。在發佈版本中進行調試會不會優化?VS中的優化設置

我想在發佈版本中調試時重現問題,或者如果可能的話,在調試版本中可能會重現該問題。 有什麼建議嗎?

+0

好吧我在調試版本中啓用/ RTC選項。但我的調試版本工作正常。根據我的理解/ RTC選項應該使未初始化的變量爲0xCC,以便程序崩潰或顯示奇怪的結果。 – anand 2009-05-03 14:31:06

+0

是否有任何其他方式可以使我的調試版本像在發行版本中的行爲一樣表現?或者有什麼辦法來調試我的發佈版本來解決這個問題。 – anand 2009-05-03 14:32:11

回答

2

VC++以特殊值在調試模式下填充運行時內存。它不能確保任何固定或零初始化。細節請閱讀此SO線程。 Uninitialized Memory Blocks。這些值不會每次都使應用程序崩潰。

我已經遇到過類似的情況。一個常見的例子是訪問數組邊界是一個錯誤。很多時候,這在調試模式下並不明顯,但在發佈版本中崩潰。一般來說,運行時在調試模式下是寬鬆的,並且爲程序員錯誤提供了更多的覆蓋。

正如其他人指出的那樣,代碼確實存在一些問題;很可能是未初始化的變量。

0

關閉我的頭頂:確保您使用的ASSERT不包含任何邏輯,因爲它們在發佈版本中被丟棄。

0

這與優化無關。在調試版本中,編譯器通常會將變量初始化爲已知值,而在發佈版本中則不會。您描述的症狀可能是由於您的代碼中存在未初始化的變量或指針。

1

嘗試啓用/RTC (Run-Time Error Checks編譯器標誌,並使用的s選項。這將局部變量初始化爲非零值,這有助於診斷未初始化的變量。