描述和.DBG 檔案的.PDB 檔案

文章翻譯 文章翻譯
文章編號: 121366 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

.PDB 副檔名代表程式資料庫。它會保存在 Visual C++ 1.0 版中儲存以後開始引進的偵錯資訊的新格式。在未來.PDB 檔案也會保留其他專案狀態資訊。其中一個最重要 motivations 格式變更,就是允許累加連結偵錯版本的變更,首次引入 Visual C++ 2.0 版中的程式。

.DBG 副檔名代表 「 偵錯]。建立與 32 位元 NT 工具組的.DBG 檔案位於可攜式可執行檔 (PE) 檔案格式。 它們包含 COFF FPO,並在某些情況下 Codeview 資訊的區段。整合的 Visual C++ 偵錯工具可以讀取.DBG 檔案,在此格式,不過它會忽略 COFF 符號區段,並會尋找 Codeview 資訊。

如果需要判斷.DBG 檔案中包含何種符號資訊您可以在命令提示字元中輸入下列:
Dumpbin sample.dbg/symbol.
				
筆記 的路徑可能會需要 Dumpbin.exe 和 MSdis100.dll 包含目錄:
Path=%Path%;C:\Program Files\DevStudio\VC\bin;C:\Msssdk\bin
				
如需有關 DUMPBIN,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
177429DUMPBIN 輸出的範例

其他相關資訊

.PDB 檔案

而早、 16 位元版本的 Visual C++ 用.PDB 檔案,儲存在它們所偵錯資訊已由連結器附加到.EXE 或.DLL 檔案的結尾。在上面提到的 Visual C++ 版本,連結器和整合式的偵錯工具已修改為允許直接在偵錯程序期間使用的.PDB 檔案藉此消除相當大量的連結器的工作和也略過麻煩 CVPACK 限制的 64K 型別。

如需有關 CVPACK 限制,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
112335注意: CK1020 或 CK4009 時發生型別資訊超過 64K
預設情況下,在建置 Visual 工作,所產生的專案時編譯器參數/Fd 用來重新命名以 <project>.PDB.PDB 檔案。 因此,您必須針對整個專案只能有一個.PDB 檔案。

當您執行未產生由 Visual 工作的 makefile / Fd 不會使用以/Zi 您最後會以兩個.PDB 檔案:
  • VCx0.PDB (其中"x"參照到對應 Visual C++,可能是"2"或"4"主要版本),可儲存個別.OBJ 檔案的所有偵錯資訊。它會保留在專案 Makefile 所在的目錄中。
  • <project>儲存產生的.EXE 檔的所有偵錯資訊的.PDB。它位於 \WINDEBUG 子目錄中。
為什麼兩個檔案嗎?執行編譯器時它不會知道到哪個.OBJ 檔案將會連結,.EXE 檔的名稱,所以編譯器不能將放入 <project>.PDB 資訊。兩個檔案儲存不同的資訊。每當您編譯一個.OBJ] 檔案,編譯器將偵錯資訊合併成 VCX0.PDB。它不會將放入符號資訊 (例如,函式定義。它只會置於有關型別。 這樣的好處之一是當每個原始程式檔包含常見的標頭檔,例如 <windows.h>,從這些標頭的所有 typedefs 只都儲存一次,而不是在.OBJ 中的每個檔案。

您在執行連結器時它會建立 <project>保存專案的.EXE 檔的偵錯資訊的.PDB。所有的偵錯資訊,包括函式原型和其他,項目放入 <project>.PDB 不只是在 VCX0.PDB 中找到該型別資訊。兩種.PDB 檔案共用相同的副檔名,因為它們是 architecturally 類似 ; 它們都允許累加更新。不過,他們實際儲存不同的資訊。

新的 Visual C++ 偵錯工具使用 <project>.PDB 檔案直接,由連結器所建立,並且.EXE 或.DLL 檔案中內嵌 [.PDB 之絕對路徑。如果偵錯工具找不到該地點的.PDB 檔案或路徑是無效 (如果,例如專案已移到另一部電腦),偵錯工具會尋找它的目前目錄中。

.DBG 檔案

只要從二進位包含偵錯輸出的 Codeview 格式進行整合的 Visual C++ 偵錯工具也可以使用.DBG 檔案。 這些是偵錯不可以使用原始碼時很有用。即使沒有在來源.DBG 檔案可讓您在函式上設定中斷點、 監看變數,並查看呼叫堆疊中的函式。它們也是必要的 OLE RPC 偵錯。

需要指一個警告: 當使用從.DBG 檔案的符號時必須使用完全裝飾的名稱。比方說 Windows sndPlaySound 函式呼叫上設定中斷點,您可以指定 _sndPlaySoundA@8 為位置。

有實際兩種.DBG 檔案格式。16 位元世界中,舊格式已存在相當一段時間。比方說因為.COM 檔案的格式載入記憶體中的簡單二進位影像 Codeview 偵錯資訊可能不附加到檔案結尾因為檔案大小可能超過.COM 檔案 64K 的限制。因此符號資訊已改放入個別的.DBG 檔案,其中有只 Codeview 資訊。藉由使用 /strip 選項的.EXE 檔上執行 CVPACK,可能也會產生.DBG 檔案。

32 位元.EXEs、 Visual C++ 版本 2.x 及 4.x 偵錯工具的符號處理常式不會讀取舊的格式。而是,它會讀取使用 Windows NT.DBG] 檔案中其系統.DLL 檔案與提供使用的格式。 這些.DBG 檔案位於可攜式可執行檔 (PE) 檔案格式,且包含 COFF FPO,並在某些情況下 Codeview 符號資訊的區段。新的 Visual C++ 偵錯工具會讀取這個格式只.DBG 檔案。此外,它只會使用 Codeview 資訊忽略其他符號區段。

它有可能刪去從 PE 檔案的偵錯資訊,並將它儲存在.DBG 檔案以進行偵錯工具使用。此工作偵錯工具需要知道是否要在個別檔案中找到偵錯資訊,或未和是否資訊已被從檔案中除去與否。一種方法會讓偵錯工具搜尋尋找偵錯資訊的可執行檔。不過,來偵錯工具從不必搜尋該檔案儲存檔案特性欄位 (IMAGE_FILE_DEBUG_STRIPPED) 已是,指出檔案已被剔除。偵錯工具可以在 PE 檔案標頭快速地判斷偵錯資訊是否出現在檔案或不這個欄位的查詢。

若要在這種格式中產生.DBG 檔案,您可以使用 Win32 SDK 所隨附的 REBASE.EXE。請參閱 Win32 SDK 文件以取得更多詳細資料。

在 Windows NT 零售組建偵錯符號從系統二進位檔案和驅動程式中除去,而且儲存在個別的.DBG 檔案上。這是因為 Windows NT 核心偵錯工具可以使用這些.DBG 檔案,甚至為最佳化的驅動程式提供偵錯符號。不過,記得整合的 Visual C++ 偵錯工具不設計來偵錯受保護的模式的核心程式碼。

Windows NT 符號檔可以找到 \SUPPORT 目錄在 Windows NT 零售 CD-ROM 上的偵錯子目錄中。這些檔案必須從光碟片複製到您的硬碟機。為使用者模式偵錯目標的偵錯工具電腦,.DBG 符號必須是出現在 Windows NT \<winnt>\SYMBOLS 目錄的目標系統中 (<winnt>是 Windows NT 的安裝位置的目錄)。新的 Visual C++ 安裝程式會在您的程式群組中安裝 「 NT 系統符號安裝程式 」 圖示。您可以使用它會自動從 Windows NT 工作站 CD-ROM 磁碟硬碟機上,將.DBG 檔案複製到正確的目錄結構。這個方法不適用於 Windows NT Server 4.0 CD-ROM,因為.DBG 檔案儲存在壓縮的格式。

核心偵錯,將放到下方 _NT_SYMBOL_PATH 環境變數 (比方說 C:\DEBUG\SYMBOLS) 所指定的目錄符號樹狀結構的.DBG 檔案。核心偵錯有可能的符號所組成的所有驅動程式 (*.SYS) SYMBOLS\SYS] 目錄中的符號和符號 NTOSKRNL.EXE 和 HAL.DLL SYMBOLS\EXE 和 SYMBOLS\DLL] 目錄中分別的最小集合。如需有關核心偵錯的詳細資訊,請參閱有關核心偵錯 Windows NT DDK 程式設計指南 》 中討論。

雖然是理論從.PDB 檔案轉換回到.DBG 檔案不是一般的任務。這次我們知道沒有這類的工具。 如果我們聽到這類工具的我們將會更新本文 「 Microsoft 知識庫 」 中。

屬性

文章編號: 121366 - 上次校閱: 2005年8月5日 - 版次: 3.1
這篇文章中的資訊適用於:
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 6.0 Service Pack 5
  • Microsoft Visual C++ 5.0 Standard Edition
  • Microsoft Visual C++ 6.1
關鍵字:?
kbmt kbbug kbdebug kbide kbinfo KB121366 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:121366
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com