選擇為程式建立的調試資訊的類型,並選擇是將此資訊儲存在對象 (.obj) 檔案還是程式資料庫 (PDB) 中。
/Z{7|i|I} 備忘
下表描述了這些選項。
-
無
-
不產生任何調試資訊,因此編譯較快。
-
/Z7
-
產生包含用於調試器的完整符號調試資訊的 .obj 檔案。符號調試資訊包括變數的名稱和類型以及函數和行號。不會產生任何 .pdb 檔案。
對於第三方庫的發行者,不產生 .pdb 檔案是一個優點。但是,在連結和調試期間,用於先行編譯頭的 .obj 檔案是必需的。如果 .pch 對象檔案中只有類型資訊(沒有代碼),則還必須使用 /Yl(為調試庫插入 PCH 引用) 進行編譯。
-
/Zi
-
產生包含用於調試器的類型資訊和符號調試資訊的程式資料庫 (PDB)。符號調試資訊包括變數的名稱和類型以及函數和行號。
/Zi 不影響最佳化。但是,/Zi 的確暗示了 /debug;有關更多資訊,請參見 /DEBUG(產生調試資訊)。
類型資訊放置在 .pdb 檔案而不是 .obj 檔案中。
可以將 /Gm(啟用最小重建) 和 /Zi 結合使用,但使用 /Z7 編譯時間不能使用 /Gm。
使用 /Zi 和 /clr 編譯時間,DebuggableAttribute 屬性將不會被放入組件中繼資料中;如果要使用該屬性,則必須在原始碼中指定它。該屬性可影響應用程式的運行時效能。有關 Debuggable 屬性如何影響效能以及如何減輕效能影響的更多資訊,請參見令映像更易於調試。
-
/ZI
-
以支援“編輯並繼續”功能的格式產生如上所述的程式資料庫。如果想使用“編輯並繼續”調試,則必須使用此選項。因為大多數最佳化與“編輯並繼續”不相容,所以使用 /ZI 會禁用代碼中的所有 #pragma optimize 語句。
/ZI 會導致在編譯中使用 /Gy(啟用函數級連結)。
/ZI 與 /clr(公用語言運行庫編譯) 不相容。
| 說明: |
/ZI 只可用於面向 x86 的編譯器中;此編譯器選項不可用於面向 x64 或 Itanium 處理器系列 (IPF) 的編譯器中。 |
編譯器將程式資料庫命名為 項目.pdb。如果編譯沒有項目的檔案,則編譯器將建立名為 VCx0.pdb. 的資料庫,其中 x 是正在使用的 Visual C++ 的主要版本。編譯器將 PDB 的名稱嵌入每個使用此選項建立的 .obj 檔案中,從而使調試器瞭解符號和行號資訊的位置。當使用此選項時,.obj 檔案將較小,因為調試資訊儲存在 .pdb 檔案中而不是 .obj 檔案中。
如果從使用此選項編譯的對象建立庫,則在將庫連結到程式時,關聯 .pdb 檔案必須可用。因此,如果發布此庫,就必鬚髮布 PDB。
若要不使用 .pdb 檔案建立包含調試資訊的庫,必須選擇編譯器的 C 7.0 相容 (/Z7) 選項。如果使用先行編譯頭選項,則先行編譯頭和其他原始碼的調試資訊都放在 PDB 中。指定了“程式資料庫”選項時將忽略 /Yd 選項。
在 Visual Studio 開發環境中設定此編譯器選項
開啟此項目的“屬性頁面”對話方塊。有關詳細資料,請參見如何:開啟項目屬性頁面。
單擊“C/C++”檔案夾。
單擊“常規”屬性頁面。
修改“調試資訊格式”屬性。
以編程方式設定此編譯器選項