vs中debug和release版本的區別


vs中的程序有debug和release兩個版本,Debug通常稱為調試版本,通過一系列編譯選項的配合,編譯的結果通常包含調試信息,而且不做任何優化,以為開發 人員提供強大的應用程序調試能力。而Release通常稱為發布版本,是為用戶使用的,一般客戶不允許在發布版本上進行調試。所以不保存調試信 息,同時,它往往進行了各種優化,以期達到代碼最小和速度最優。為用戶的使用提供便利。

debug程序通常比release程序要慢,尤其是處理視頻方便release要比debug快很多。在release模式對程序進行調試的時候經常會遇到變量雖然初始化了,但是在查看其值的時候卻發現是一個隨機的數並不是初始化的值,有時候在對變量進行監視的時候了,會出現找不到變量的情況,原因大致如下:

debug跟release在初始化變量時所做的操作是不同的,debug是將每個字節位都賦成0xcc, 而release的賦值近似於隨機。如果你的程序中的某個變量沒被初始化就被引用,就很有可能出現異常:用作控制變量將導致流程導向不一致;用作數組下標將會使程序崩潰;更加可能是造成其他變量的不准確而引起其他的錯誤。所以在聲明變量后馬上對其初始化一個默認的值是最簡單有效的辦法,否則項目大了你找都沒地方找。代碼存在錯誤在debug方式下可能會忽略而不被察覺到。debug方式下數組越界也大多不會出錯,在release中就暴露出來了,這個找起來就比較難了。

只有DEBUG版的程序才能設置斷點、單步執行、使用 TRACE/ASSERT等調試輸出語句。release不包含任何調試信息,所以體積小、運行速度快。

一、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時請注意:

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

解決辦法是將debug和release的程序分別放在主程序的debug和release目錄下
————————————————
版權聲明:本文為CSDN博主「小帥哥gaoyi」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/gaoyi221119/article/details/88890486


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM