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