debug,release 和 distribution 的區別,release和debug區別

來源:互聯網
上載者:User

debug,release 和 distribution 的區別,release和debug區別
一般就是區分debug和release.
debug用來調試,一般會帶調試資訊,release去掉了調試資訊,並且一般編譯時間經過了最佳化,用來發布給使用者使用。

distribution一般不使用這種說法吧,如果有估計和release是一樣的意思吧。


debug就是寫程式的時候有,release是測試產品環境,distribution就是release更換了正式發布時候的認證簽名。因為這個認證你沒法在自己的裝置上測試。


debug會有調試資訊,而且,一般是不最佳化的,也就是說,debug版本可能會比release版本慢一個數量級。


其他兩種,上面已經解釋得很清楚了。

但是distribution,其實就是使用了企業認證的編譯版本。雖然這不是特別要求非得如此,但是許多參與企業版認證發布的程式員都遵守了這麼一個協議


DEBUG 與Release的不同

DEBU是調試版本,可以說是系統還在開發中Release是發布版本,說明系統可以給使用者使用了 主要區別是在於運行時產生的資訊不同,以及啟動並執行效能不同
 
VC中release與debug版本的不同?

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 並沒有本質的界限,他們只是一組編譯選項的集合,編譯器只是按照預定的選項行動。事實上,我們甚至可以修改這些選項,從而得到最佳化過的調試版本或是帶跟蹤語句的發布版本。
哪些情況下 Release 版會出錯
有了上面的介紹,我們再來逐個對照這些選項看看 Release 版錯誤是怎樣產生的
1、Runtime Library:連結哪種運行時刻函數庫通常只對程式的效能產生影響。調試版本的 Runtime Library 包含了調試資訊,並採用了一些保護機制以協助發現錯誤,因此效能不如發布版本。編譯器提供的 Runtime Library 通常很穩定,不會造成 Release 版錯誤;倒是由於 Debug 的 Runtime Library 加強了對錯誤的檢測,如堆記憶體配置,有時會出現 Debug 有錯但 Release 正常的現象。應當指出的是,如果 Debug 有錯,即使 Release 正常,程式肯定是有 Bug 的,只不過可能是 Release 版的某次運行沒有表現出來而已。
2、最佳化:這是造成錯誤的主要原因,因為關閉最佳化時來源程式基本上是直接翻譯的,而開啟最佳化後編譯器會作出一系列假設。這類錯誤主要有以下幾種:
1. 幀指標(Frame Pointer)省略(簡稱FPO):在函數調用過程中,所有調用資訊(返回地址、參數)以及自動變數都是放在棧中的。若函數的聲明與實現不同(參數、傳回值、調用方式),就會產生錯誤,但 Debug 方式下,棧的訪問通過 EBP 寄存器儲存的地址實現,如果沒有發生數組越界之類的錯誤(或是越界“不多”),函數通常能正常執行;Release 方式下,最佳化會省略 EBP 棧基址指標,這樣通過一個全域指標訪問棧就會造成返回地址錯誤是程式崩潰。
C++ 的強型別特效能檢查出大多數這樣的錯誤,但如果用了強制類型轉換,就不行了。你可以在 ......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.