與除錯有關的編譯和鏈結選項

2021-04-01 07:05:40 字數 1421 閱讀 8602

跟蹤錯誤有用的編譯選項

:/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...