1、問(wèn)題闡述
在VC工程比較大時(shí),開(kāi)發(fā)的軟件通常會(huì)出現(xiàn)在Debug狀態(tài)下能夠正常運(yùn)行,而在Release狀態(tài)下無(wú)法正常運(yùn)行的情況。這種錯(cuò)誤的檢查的前提是要弄清二者之間本質(zhì)的區(qū)別。
2、Debug和Release的區(qū)別
①Debug版本包含了大量的調(diào)試信息,所以形成的可執(zhí)行文件要比Release版本大。
②二者根據(jù)選擇的編譯選項(xiàng)不同,需要的支持庫(kù)也不同,如果是MFC的工程,則需要MFC42D.dll等庫(kù)支持,而Release版本則需要MFC42.dll的支持。
③Release Build不對(duì)源代碼進(jìn)行調(diào)試,不考慮MFC的診斷宏,使用的是MFC Release庫(kù),編譯是對(duì)應(yīng)用程序的速度進(jìn)行優(yōu)化,而Debug Build則正好相反,它允許對(duì)源代碼進(jìn)行調(diào)試,可以定義和使用MFC的診斷宏,采用MFC Debug庫(kù),對(duì)速度沒(méi)有優(yōu)化。
以上從現(xiàn)象上介紹了Debug版本和Release版本之間的區(qū)別,它們的本質(zhì)區(qū)別在于一組編譯的開(kāi)關(guān)量的設(shè)置,編譯時(shí)開(kāi)關(guān)量如表2-2和表2-3所示
表2-2 Debug版本編譯選項(xiàng)表
編譯選項(xiàng)
|
設(shè)置
|
/MDd
|
與MSVCRTD.lib調(diào)試庫(kù)鏈接
|
/MLd
|
與LIBCD.lib調(diào)試庫(kù)鏈接
|
/MTd
|
與LIBCMTD.lib調(diào)試庫(kù)鏈接
|
/Od
|
關(guān)閉優(yōu)化開(kāi)關(guān)
|
/D
|
打開(kāi)編譯器調(diào)試開(kāi)關(guān)
|
/ZI
|
創(chuàng)建Edit and continue(編輯繼續(xù))數(shù)據(jù)庫(kù),這樣在調(diào)試過(guò)程中如果改了源代碼不需要重新編譯
|
/GZ
|
可以幫助捕獲內(nèi)存錯(cuò)誤
|
/Gm
|
打開(kāi)最小化重鏈接開(kāi)關(guān),減少鏈接時(shí)
|
表2-3 Release版本的編譯選項(xiàng)表
編譯選項(xiàng)
|
設(shè)置
|
/MD
|
與MSVCRT.lib鏈接
|
/ML
|
與LIBC.lib鏈接
|
/MT
|
與LIBCMT.lib鏈接
|
/o1
|
最小化空間
|
/o2
|
最快速度
|
/D
|
設(shè)置為NDEBUG
|
/GF
|
啟用字符串池
|
如果還想獲得更多關(guān)于《Visual C++代碼參考與技巧大全》的內(nèi)容,可點(diǎn)擊下面網(wǎng)址,http://www.shnenglu.com/kangnixi/archive/2010/01/13/105591.html