Debug和Release版本的區別

2021-05-22 11:33:12 字數 1454 閱讀 6762

三、怎樣「除錯」   release   版的程式  

遇到   debug   成功但   release   失敗,顯然是一件很沮喪的事,而且往往無從下手。如果你看了以上的分析,結合錯誤的具體表現,很快找出了錯誤,固然很好。但如果一時找不出,以下給出了一些在這種情況下的策略。  

1.   前面已經提過,debug   和   release   只是一組編譯選項的差別,實際上並沒有什麼定義能區分二者。我們可以修改   release   版的編譯選項來縮小錯誤範圍。如上所述,可以把   release   的選項逐個改為與之相對的   debug   選項,如   /md   改為   /mdd、/o1   改為   /od,或執行時間優化改為程式大小優化。注意,一次只改乙個選項,看改哪個選項時錯誤消失,再對應該選項相關的錯誤,針對性地查詢。這些選項在   project/settings...   中都可以直接通過列表選取,通常不要手動修改。由於以上的分析已相當全面,這個方法是最有效的。  

2.   在程式設計過程中就要時常注意測試   release   版本,以免最後**太多,時間又很緊。  

3.   在   debug   版中使用   /w4   警告級別,這樣可以從編譯器獲得最大限度的錯誤資訊,比如   if(   i   =0   )就會引起   /w4   警告。不要忽略這些警告,通常這是你程式中的   bug   引起的。但有時   /w4   會帶來很多冗餘資訊,如   未使用的函式引數   警告,而很多訊息處理函式都會忽略某些引數。我們可以用  

#progma   warning(disable:   4702)   //禁止  

//...  

#progma   warning(default:   4702)   //重新允許  

來暫時禁止某個警告,或使用  

#progma   warning(push,   3)   //設定警告級別為   /w3  

//...  

#progma   warning(pop)   //重設為   /w4  

來暫時改變警告級別,有時你可以只在認為可疑的那一部分**使用   /w4。  

4.你也可以像   debug   一樣除錯你的   release   版,只要加入除錯符號。在   project/settings...   中,選中   settings   for   "win32   release",選中   c/c++   標籤,category   選   general,debug   info   選   program   database。再在   link   標籤   project   options     最後加上   "/opt:ref"   (引號不要輸)。這樣偵錯程式就能使用   pdb   檔案中的除錯符號。但除錯時你會發現斷點很難設定,變數也很難找到——這些都被優化過了。不過令人慶幸的是,call   stack   視窗仍然工作正常,即使幀指標被優化,棧資訊(特別是返回位址)仍然能找到。這對定位錯誤很有幫助。

release版本和debug版本

程式一般分為debug 版本和release 版本,debug 版本用於內部除錯,release 版本發行給使用者使用 release和 debug 有什麼不同 release版稱為發行版,debug版稱為除錯版。debug中可以單步執行 跟蹤等功能,但生成的可執行檔案比較大,執行速度較慢。rele...

debug版本和release版本

執行 debug版本輸出結果 仔細觀察,可以發現release版本的結果中,a與c的值差為4,debug版本的結果中,a和c的結果直差為8.為什麼?四個位元組被優化掉了。32位系統 呼叫函式是通過棧來傳遞引數,我們列印的位址實際上是在棧裡面位置的位址 64位系統 函式傳參絕大多數不同通過棧來傳輸的,...

debug和release版本對比

debug和release,在我看來主要是針對其面向的目標不同的而進行區分的 debug通常稱為除錯版本,通過一系列編譯選項的配合,編譯的結果通常包含除錯資訊,而且不做任何優化,以為開發人員提供強大的應用程式除錯能力。release通常稱為發布版本,是為使用者使用的,一般客戶不允許在發布版本上進行除...