欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

項目發(fā)布Debug和Release版的區(qū)別詳解

 更新時間:2020年10月21日 11:55:23   作者:taiyonghai  
這篇文章主要為大家詳細介紹了項目發(fā)布Debug和Release版的區(qū)別,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家講解了項目發(fā)布Debug和Release版的區(qū)別,供大家參考,具體內(nèi)容如下

一、Debug和Release的區(qū)別

Debug:調(diào)試版本,包含調(diào)試信息,所以容量比Release大很多,并且不進行任何優(yōu)化(優(yōu)化會使調(diào)試復雜化,因為源代碼和生成的指令間關系會更復雜),便于程序員調(diào)試。Debug模式下生成兩個文件,除了.exe或.dll文件外,還有一個.pdb文件,該文件記錄了代碼中斷點等調(diào)試信息

Release:發(fā)布版本,不對源代碼進行調(diào)試,編譯時對應用程序的速度進行優(yōu)化,使得程序在代碼大小和運行速度上都是最優(yōu)的。(調(diào)試信息可在單獨的PDB文件中生成)。Release模式下生成一個文件.exe或.dll文件 

二、Obj文件夾的作用

obj目錄中也有debug和release兩個子目錄,obj目錄是項目生成dll的源目錄,然后將生成好的dll復制到bin目錄下。obj用于存放編譯過程中生成的中間臨時文件。在.Net中,編譯時分模塊進行的,每個模塊的編譯結果都保存在obj目錄下,最后會合并為一個.exe或則.dll文件保存到bin目錄下。

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

三、Debug 和 Release 編譯方式的本質(zhì)區(qū)別

Debug 通常稱為調(diào)試版本,它包含調(diào)試信息,并且不作任何優(yōu)化,便于程序員調(diào)試程序。Release 稱為發(fā)布版本,它往往是進行了各種優(yōu)化,使得程序在代碼大小和運行速度上都是最優(yōu)的,以便用戶很好地使用。
Debug 和 Release 的真正秘密,在于一組編譯選項。下面列出了分別針對二者的選項(當然除此之外還有其他一些,如/Fd /Fo,但區(qū)別并不重要,通常他們也不會引起 Release 版錯誤,在此不討論)

Debug 版本:

/MDd /MLd 或 /MTd 使用 Debug runtime library(調(diào)試版本的運行時刻函數(shù)庫)
/Od 關閉優(yōu)化開關
/D "_DEBUG" 相當于 #define _DEBUG,打開編譯調(diào)試代碼開關(主要針對assert函數(shù))
/ZI 創(chuàng)建 Edit and continue(編輯繼續(xù))數(shù)據(jù)庫,這樣在調(diào)試過程中如果修改了源代碼不需重新編譯
/GZ 可以幫助捕獲內(nèi)存錯誤
/Gm 打開最小化重鏈接開關,減少鏈接時間

Release 版本:

/MD /ML 或 /MT 使用發(fā)布版本的運行時刻函數(shù)庫
/O1 或 /O2 優(yōu)化開關,使程序最小或最快
/D "NDEBUG" 關閉條件編譯調(diào)試代碼開關(即不編譯assert函數(shù))
/GF 合并重復的字符串,并將字符串常量放到只讀內(nèi)存,防止被修改

實際上,Debug 和 Release 并沒有本質(zhì)的界限,他們只是一組編譯選項的集合,編譯器只是按照預定的選項行動。事實上,我們甚至可以修改這些選項,從而得到優(yōu)化過的調(diào)試版本或是帶跟蹤語句的發(fā)布版本。

四、附錄:

DLL的災難

人們將不同版本DLL混合造成的不一致性形象的稱為 “動態(tài)連接庫的地獄“(DLL Hell) ,甚至微軟自己也這么說。

如果你的程序使用你自己的DLL時請注意:

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

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

所以在實際生產(chǎn)環(huán)境中,盡量使用Release版本的DLL。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Andriod studio 打包aar 的方法

    Andriod studio 打包aar 的方法

    這篇文章主要介紹了Andriod studio 打包aar的方法,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-12-12
  • Android Application級別自定義Toast

    Android Application級別自定義Toast

    這篇文章主要為大家詳細介紹了Android Application級別自定義Toast,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android GridView實現(xiàn)橫向列表水平滾動

    Android GridView實現(xiàn)橫向列表水平滾動

    這篇文章主要為大家詳細介紹了Android GridView實現(xiàn)橫向列表水平滾動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Kotlin fun函數(shù)使用方法

    Kotlin fun函數(shù)使用方法

    函數(shù)是執(zhí)行特定任務的一組相互關聯(lián)的代碼塊。函數(shù)用于將程序分解為不同的子模塊。它使代碼可重用,并使程序更易于管理,這篇文章主要介紹了Kotlin fun函數(shù)使用方法
    2022-12-12
  • Android 管理Activity中的fragments

    Android 管理Activity中的fragments

    為了管理Activity中的fragments,需要使用FragmentManager,為了得到它,需要調(diào)用Activity中的getFragmentManager()方法,接下來詳細介紹,感興趣的朋友可以了解下哦
    2013-01-01
  • Android編程實現(xiàn)左右滑動切換背景的方法

    Android編程實現(xiàn)左右滑動切換背景的方法

    這篇文章主要介紹了Android編程實現(xiàn)左右滑動切換背景的方法,涉及Android圖形資源動態(tài)調(diào)用與動作監(jiān)聽相關技巧,需要的朋友可以參考下
    2016-01-01
  • Android仿淘寶首頁頭條View垂直滾動效果

    Android仿淘寶首頁頭條View垂直滾動效果

    這篇文章主要為大家詳細介紹了Android仿淘寶首頁頭條View垂直滾動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Flutter?將Dio請求轉發(fā)原生網(wǎng)絡庫的實現(xiàn)方案

    Flutter?將Dio請求轉發(fā)原生網(wǎng)絡庫的實現(xiàn)方案

    這篇文章主要介紹了Flutter?將Dio請求轉發(fā)原生網(wǎng)絡庫,需要注意添加NativeNetInterceptor,如果有多個攔截器,例如LogInterceptors等等,需要將NativeNetInterceptor放到最后,需要的朋友可以參考下
    2022-05-05
  • Android 自定義標題欄背景

    Android 自定義標題欄背景

    最近在做android項目,需要做一個自定義的標題欄(操作欄)。去網(wǎng)上找了很多demo,發(fā)現(xiàn)都有很多問題。例如使用自定義的style。下面來分享下個人最終的解決方案吧
    2016-01-01
  • Android編程實現(xiàn)顯示在標題上的進度條功能【附源碼下載】

    Android編程實現(xiàn)顯示在標題上的進度條功能【附源碼下載】

    這篇文章主要介紹了Android編程實現(xiàn)顯示在標題上的進度條功能,涉及Android界面布局及相關組件屬性設置技巧,并附帶完整實例源碼供讀者下載參考,需要的朋友可以參考下
    2018-01-01

最新評論