聞怡洋 譯
homepage: http://vchelp.zb169.net
在VC中當整個工程較大時,軟件時常爲出現在DEBUG狀態下能運行而在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().
找出定義在"#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"優化選項並未被完全支持,因此這將會引起內存錯誤並導致程序崩潰。
爲什麼VC中DEBUG版本可以正常運行的程序有時無法在RELEASE版本下正常運行(轉)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.