專案發布Debug和Release版的區別

2021-09-23 10:21:06 字數 1820 閱讀 1290

一、debug和release的區別

debug:除錯版本,包含除錯資訊,所以容量比release大很多,並且不進行任何優化(優化會使除錯複雜化,因為源**和生成的指令間關係會更複雜),便於程式設計師除錯。debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了**中斷點等除錯資訊

release:發布版本,不對源**進行除錯,編譯時對應用程式的速度進行優化,使得程式在**大小和執行速度上都是最優的。(除錯資訊可在單獨的pdb檔案中生成)。release模式下生成乙個檔案.exe或.dll檔案

二、obj資料夾的作用

obj目錄中也有debug和release兩個子目錄,obj目錄是專案生成dll的源目錄,然後將生成好的dll複製到bin目錄下。obj用於存放編譯過程中生成的中間臨時檔案。在.net中,編譯時分模組進行的,每個模組的編譯結果都儲存在obj目錄下,最後會合併為乙個.exe或則.dll檔案儲存到bin目錄下。

因為每次編譯都是增量編譯,也就是只重新編譯改變了的模組,所以這個obj目錄的作用就是儲存這些小塊的編譯結果,加快編譯速度。

三、debug 和 release 編譯方式的本質區別

debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。release 稱為發布版本,它往往是進行了各種優化,使得程式在**大小和執行速度上都是最優的,以便使用者很好地使用。

debug 和 release 的真正秘密,在於一組編譯選項。下面列出了分別針對二者的選項(當然除此之外還有其他一些,如/fd /fo,但區別並不重要,通常他們也不會引起 release 版錯誤,在此不討論)

debug 版本:

/mdd /mld 或 /mtd 使用 debug runtime library(除錯版本的執行時刻函式庫)

/od 關閉優化開關

/d "_debug" 相當於 #define _debug,開啟編譯除錯**開關(主要針對assert函式)

/zi 建立 edit and continue(編輯繼續)資料庫,這樣在除錯過程中如果修改了源**不需重新編譯

/gz 可以幫助捕獲記憶體錯誤

/gm 開啟最小化重鏈結開關,減少鏈結時間

release 版本:

/md /ml 或 /mt 使用發布版本的執行時刻函式庫

/o1 或 /o2 優化開關,使程式最小或最快

/d "ndebug" 關閉條件編譯除錯**開關(即不編譯assert函式)

/gf 合併重複的字串,並將字串常量放到唯讀記憶體,防止被修改

實際上,debug 和 release 並沒有本質的界限,他們只是一組編譯選項的集合,編譯

器只是按照預定的選項行動。事實上,我們甚至可以修改這些選項,從而得到優化過的調

試版本或是帶跟蹤語句的發布版本。

四、附錄:

dll的災難 

人們將不同版本dll混合造成的不一致性形象的稱為 「動態連線庫的地獄「(dll hell) ,甚至微軟自己也這麼說( 

如果你的程式使用你自己的dll時請注意: 

不能將debug和release版的dll混合在一起使用。debug都是debug版,release版都是release版。 

解決辦法是將debug和release的程式分別放在主程式的debug和release目錄下

所以在實際生產環境中,盡量使用release版本的dll。

VTK 安裝後編譯debug版和release版

之前只用xcode,itk,vtk的時候安裝完就ok了,現在需要用到qt就有問題了 因為qt需要用到vtk 的release版的一些檔案,看了些文章,記錄一下。mac安裝vtk以後,openobject 開始了 2 在run選項後面info選擇release,然後all build。在哪看到rele...

專案發布Debug和Release版的區別

一 debug和release的區別 debug 除錯版本,包含除錯資訊,所以容量比release大很多,並且不進行任何優化 優化會使除錯複雜化,因為源 和生成的指令間關係會更複雜 便於程式設計師除錯。debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了 中...

專案發布Debug和Release版的區別

一 debug和release的區別 debug 除錯版本,包含除錯資訊,所以容量比release大很多,並且不進行任何優化 優化會使除錯複雜化,因為源 和生成的指令間關係會更複雜 便於程式設計師除錯。debug模式下生成兩個檔案,除了.exe或.dll檔案外,還有乙個.pdb檔案,該檔案記錄了 中...