/Z7、/Zi、/ZI (偵錯資訊格式)
更新:2007 年 11 月
會選取為程式建立的偵錯資訊類型,以及這項資訊是要保存在目的檔 (.obj) 或程式資料庫 (PDB) 中。
/Z{7|i|I}
備註
各選項的描述如下表。
None
不產生偵錯資訊,讓編譯快一些。/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 (Common Language Runtime 編譯) 不相容。
注意事項: /ZI 僅供以 x86 為目標的編譯器使用,這個編譯器選項不提供給以 x64 或 Itanium 處理器系列 (IPF) 為目標的編譯器使用。
編譯器會將程式資料庫命名為 project.pdb。如果編譯不含專案的檔案,編譯器會建立名為 VCx0.pdb 的資料庫,其中 x 是使用中的 Visual C++ 主要版本。編譯器會將 PDB 的名稱嵌入每一個使用這個選項建立的 .obj 檔案,將偵錯工具指向符號和行號資訊的位置。當您使用這個選項時,您的 .obj 檔案會變得小一些,因為偵錯資訊是儲存在 .pdb 檔案中,而不是儲存在 .obj 檔案中。
如果您從用這個選項編譯的物件建立程式庫,當這個程式庫連結到某個程式時,關聯的 .pdb 檔案必須能夠被使用。因此,如果您要散發這個程式庫,您必須同時散發 PDB。
若要建立含有偵錯資訊的程式庫而不使用 .pdb 檔案,必須選取編譯器的 C 7.0 相容 (/Z7) 選項。如果您使用先行編譯標頭選項,先行編譯標頭和原始程式碼其餘部分的偵錯資訊都會被置入 PDB 中。指定 [程式資料庫] 選項時,會忽略 /Yd 選項。
若要在 Visual Studio 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。如需詳細資訊,請參閱 HOW TO:開啟專案屬性頁。
按一下 [C/C++] 資料夾。
按一下 [一般] 屬性頁。
修改 [偵錯資訊格式] 屬性。