跟蹤錯誤有用的編譯選項
:/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你可以選擇任何一組選擇,所以你可以有乙個帶除錯符號、跟蹤語句、斷言語句的
發布版本,只要你選擇了這些選項。
除錯版本和發布版本的執行時刻函式庫的區別
:除錯版本的執行時刻函式庫有以下幾個特性:
l其對記憶體分配作了跟蹤
l在剛分配的記憶體裡寫上
0xcc
,有助於發現使用未被初始化資料的錯誤
l在被釋放的記憶體裡寫上
0xcd
l在緩衝區的兩邊分配了四位元組的保護資料,並用
0xfd
作初始化,來檢查寫記憶體
的上溢位和下溢位。
變數優化
:優化會去掉不必要的變數以及重複使用的變數,可能會優化而儲存在暫存器中。
這可能會隱藏錯誤,特別在多執行緒中。
volatile
關鍵字告訴編譯器不能對該變數優化。事
實上除錯版本中的所有變數都是
volatile
的。內聯函式
vc在除錯版中預設關掉內聯,具體地說,內聯是被
/ob0
編譯選項關掉的。對於發布版,
內聯能被
/o1(大小最小)、
/o2(速度最小)、
/ox(完全優化)開啟。
VC除錯版本與發布版本編譯鏈結選項差異和區別
1.鏈結庫 single threaded ml libc none static multithread mt libcmt mt dynamic link dll md msvcrt mt and dll debug single threaded mld libcd debug debug s...
Visual C 編譯鏈結選項的設定
上一節說道,組合語言的 已經告一段落了,接下來我們將進入c 的世界了。但是visual c 不是被設計用來開發作業系統的。假如我們用visual c 設計乙個程式,那麼在預設情況下,它必須跑在windows下。所以我們必須做一些工作使得我們的程式能夠脫離windows執行。因此,為了達到這個目的,我...
VC 關於除錯和多執行緒的編譯選項
vc編譯選項 多執行緒 mt 多執行緒除錯 mtd 多執行緒 dll md 多執行緒除錯 dll mdd c 執行時庫 庫檔案 single thread static link ml libc.lib debug single thread static link mld libcd.lib mu...