debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。
release 稱為發布版本,它往往被編譯器進行了各種優化,使得程式在**大小和執行速度上都是最優的,以便使用者很好地使用。
debug 和 release 的真正區別,在於一組編譯選項。
debug 版本引數
含義/mdd
/mld 或 /mtd 使用 debug runtime library(除錯版本的執行時刻函式庫)
/od關閉優化開關
/d 「_debug」
相當於 #define _debug,開啟編譯除錯**開關(主要針對assert函式)
/zi建立 edit and continue(編輯繼續)資料庫,這樣在除錯過程中如果修改了源**不需重新編譯
gz可以幫助捕獲記憶體錯誤
release 版本引數
含義/md /ml 或 /mt
使用發布版本的執行時刻函式庫
/o1 或 /o2
優化開關,使程式最小或最快
/d 「ndebug」
關閉條件編譯除錯**開關(即不編譯assert函式)
/gf合併重複的字串,並將字串常量放到唯讀記憶體,防止被修改
如圖,有兩種程式,一種優化過的,一種沒優化過的(.exe可執行檔案)。
配置輸出介面:
debug 和 release 並沒有本質的界限,他們只是一組編譯選項的集合,編譯器只是按照預定的選項行動。
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通常稱為發布版本,是為使用者使用的,一般客戶不允許在發布版本上進行除...