跟蹤錯誤有用的編譯選項:
/W4 用最高的警告層次編譯(所有版本均使用)
/D “_DEBUG” 開啟條件編譯調試開關,即定義了 _DEBUG(僅調試版使用)
/GZ 檢查包括未被初始化的自動(局部)變數、堆棧錯誤、不正確的函數原型
(僅調試版使用)
/Od 關閉最佳化開關,使得代碼更易讀懂(僅調試版使用)
/GF 消除重複的字串,並將字串放到唯讀記憶體中,避免它們被錯誤地修改。
當/ZI選項開啟時,該選項被自動開啟(僅在發布版使用)
/ZI 用偵錯符號和編輯繼續資訊建立程式資料庫,從而減少調試周期的時間和
所花費精力(僅在調試版中使用)
/Zi 建立偵錯符號的程式資料庫(僅在發布版使用)
調試錯誤有用的連結選項:
/MAP:”Debug/ProgramName.map” 建立一個對應檔
/MAPINFO:LINES 在對應檔中添加行號資訊
針對調試版本的編譯選項:
/MDd,/MLd,/MTd 使用調試版本的運行時刻函數庫
/Od
/D “_DEBUG”
/ZI
/GZ
/GM 開啟最小化重新連結開關,減少連結時間
針對發布版本的編譯選項:
/MD,/ML,/MT 使用發布版本的運行時刻函數庫
/O1或/O2 開啟最佳化開關,使得程式會最小或速度最快
/D “NDEBUG” 關閉條件編譯調試代碼開關
/GF
你可以選擇任何一組選擇,所以你可以有一個帶偵錯符號、跟蹤語句、Assert 陳述式的
發布版本,只要你選擇了這些選項。
調試版本和發布版本的運行時刻函數庫的區別:
調試版本的運行時刻函數庫有以下幾個特性:
l 其對記憶體配置作了跟蹤
l 在剛分配的記憶體裡寫上0xCC,有助於發現使用未被初始化資料的錯誤
l 在被釋放的記憶體裡寫上0xCD
l 在緩衝區的兩邊分配了四位元組的保護資料,並用0xFD作初始化,來檢查寫記憶體
的上溢出和下溢出。
變數最佳化:
最佳化會去掉不必要的變數以及重複使用的變數,可能會最佳化而儲存在寄存器中。
這可能會隱藏錯誤,特別在多線程中。volatile關鍵字告訴編譯器不能對該變數最佳化。事
實上調試版本中的所有變數都是volatile的。
內嵌函式
VC在調試版中預設關掉內聯,具體地說,內聯是被/Ob0編譯選項關掉的。對於發布版,
內聯能被/O1(大小最小)、/O2(速度最小)、/Ox(完全最佳化)開啟。