Share via


使用 DBH

DBH 是命令列工具,會在 DbgHelp API (dbghelp.dll) 中公開許多函式。 它可以顯示符號檔內容的相關資訊、顯示檔案中符號的特定詳細資料,以及搜尋檔案中符合各種準則的符號。

DBH 所提供的功能類似于 WinDbg、KD 和 CDB 中提供的命令,例如 x (檢查符號)

在互動式模式中執行 DBH

您可以使用簡單的命令列啟動 DBH,您可以在其中指定您想要調查其符號的目的模組。 目的模組可以是 EXE 程式或 PDB 符號檔。 您也可以指定要調查 (PID) 的進程識別碼。 如需完整語法 ,請參閱 DBH Command-Line 選項

DBH 啟動時,它會載入指定模組的符號,然後提示您輸入各種命令。 如需可用命令的清單,請參閱 DBH 命令

例如,下列順序會指定進程識別碼為 4672 的目標進程來啟動 DBH,然後在 DBH 提示字元中執行 列舉 命令,以顯示符合特定模式的符號,然後執行 q 命令以結束 DBH:

C:\> dbh -p:4672 
            400000 : TimeTest
          77820000 : ntdll
          77740000 : kernel32

pid:4672 mod:TimeTest[400000]: enum TimeTest!ma* 

 index            address     name
     1             42cc56 :   main
     3             415810 :   malloc
     5             415450 :   mainCRTStartup

pid:4672 mod:TimeTest[400000]: q 

goodbye 

以批次模式執行 DBH

如果您想要只執行單一 DBH 命令,您可以在命令列結尾指定它。 這會導致 DBH 啟動、載入指定的模組、執行指定的命令,然後結束。

例如,先前的範例可以取代為單一命令列:

C:\> dbh -p:4672 enum TimeTest!ma* 
           400000 : TimeTest
         77820000 : ntdll
         77740000 : kernel32

index            address     name
    1             42cc56 :   main
    3             415810 :   malloc
    5             415450 :   mainCRTStartup 

執行 DBH 的這個方法稱為 批次模式,因為它可以輕鬆地用於批次檔。 這個版本的命令列也可以接著管道 ( ) | ,將 DBH 輸出重新導向至另一個程式。

指定目標

DBH 可以透過三種方式選取目標:依執行中進程的進程識別碼、可執行檔的名稱或符號檔的名稱。 例如,如果目前執行 MyProg.exe 只有一個實例,且進程識別碼為 1234,則下列命令幾乎相等:

C:\> dbh -v -p:1234 
C:\> dbh -v c:\mydir\myprog.exe 
C:\> dbh -v c:\mydir\myprog.pdb 

這些命令的其中一個差異在於,當您藉由指定進程識別碼來啟動 DBH 時,DBH 會使用此進程所使用的實際虛擬位址。 當您指定可執行檔名稱或符號檔名稱來啟動 DBH 時,DBH 會假設模組的基底位址是標準值,例如 (0x01000000) 。 接著,您可以使用 基底 命令來指定實際的基底位址,進而移動模組中所有符號的位址。

DBH 不會以偵錯工具執行的方式附加至目標進程。 DBH 不會導致進程開始或結束,也無法改變該程式的執行方式。 若要讓 DBH 依進程識別碼附加至進程,目標進程必須執行,但一旦啟動 DBH,就可以終止目標進程,而且 DBH 會繼續存取其符號。

裝飾和未解碼的符號

根據預設,DBH 會在顯示和搜尋符號時使用未編碼的符號名稱。 如果您關閉 SYMOPT_UNDNAME 符號選項,或在 DBH 命令列中包含 -d 選項,則會包含裝飾。

如需符號裝飾的資訊,請參閱 公用和私人符號

結束 DBH

若要結束 DBH,請在 DBH 提示字元中使用 q 命令。