為什麼VC中DEBUG版本可以正常執行的程式有時無法在RELEASE版本下正常執行 (轉)

worldblog發表於2007-12-29
為什麼VC中DEBUG版本可以正常執行的程式有時無法在RELEASE版本下正常執行 (轉)[@more@]

在VC中當整個工程較大時,時常為出現在DE狀態下能執行而在RELEASE狀態下無法執行的情況。由於開發者通常在DEBUG狀態下開發軟體,所以這種情況時常是在我們辛苦工作一兩個月後,滿懷信心的準備將軟體發行時發生。為了避免無謂的損失,我們最好進行以下的檢查:

1、時常測試軟體的兩種版本。

2、不要輕易將問題歸結為DEBUG/RELEASE問題,除非你已經充分對兩種版本進行了測試。

3、預處理的不同,也有可能引起這樣的問題。
出現問題的一種可能性是在不同版本的編譯間定義了不同的預處理標記。請對你的DEBUG版本的軟體試一下以下改動:

  • 在"Project Setting(ALT-F7)" 中的C/C++項中設定目錄(category)為"General",並且改動"_DEBUG"定義為"NDEBUG".
  • 設定目錄為"Preprocessor"並且新增定義"_DEBUG到"Undefined Symbols"輸入框.
  • 選擇Rebuild ALL,重新編譯.
如果經過編譯的產生了問題,請對程式碼進行如下改動:
  • 將ASSERT() 改為 VERIFY()。因為ASSERT中的內容在Release版本中不被編譯。
  • 找出定義在"#ifdef _DEBUG"中的程式碼,如果在RELEASE版本中需要這些程式碼請將他們移到定義外。
  • 查詢TRACE(...)中程式碼,因為這些程式碼在RELEASE中也不被編譯。
所以請認真檢查那些在RELEASE中需要的程式碼是否並沒有被編譯。

4、變數的初始化所帶來的不同,在不同的,或是在DEBUG/RELEASE版本間都存在這樣的差異,所以請對變數進行初始化。

5、是否在編譯時已經有了警告?請將警告級別設定為3或4,然後保證在編譯時沒有警告出現.

6、是否改動了資源.

7、此外對RELEASE版本的軟體也可以進行,請做如下改動:

  • 在"Project Settings" 中 "C++/C " 專案下設定 "category" 為 "General" 並且將"Debug Info"設定為 "Program Database".
  • 在"Link"專案下選中"Generate Debug Info"檢查框。
  • "Rebuild All"
如此做法會產生的一些限制:
  • 無法獲得在MFC DLL中的變數的值。
  • 必須對該軟體所使用的所有DLL工程都進行改動。

另:
MS BUG:MS的一份技術文件中表明,在VC5中對於DLL的"Maximize Speed"選項並未被完全支援,因此這將會引起錯誤並導致程式崩潰。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996097/,如需轉載,請註明出處,否則將追究法律責任。

相關文章