使用 DBH
DBH 是命令行工具,會在 DbgHelp API 中公開許多函式(dbghelp.dll)。 它可以顯示符號檔內容的相關信息、顯示檔案中符號的特定詳細數據,以及搜尋符合各種準則的符號。 如需詳細資訊,請參閱 偵錯說明連結庫。
DBH 所提供的功能類似於在 WinDbg、KD 和 CDB 中提供的命令,例如 x(檢查符號)。
在互動式模式中執行 DBH
您可以使用簡單的命令行啟動 DBH,您可以在其中指定您想要調查其符號的目標模組。 目標模組可以是 EXE 程式或 PDB 符號檔。 您也可以指定要調查的進程識別碼(PID)。 如需完整的語法,請參閱 DBH 命令行選項 。
當 DBH 啟動時,它會載入指定模組的符號,然後提示您輸入各種命令的提示。 如需可用的命令清單,請參閱 DBH 命令 。
例如,下列順序會指定進程標識碼為 4672 的目標進程,然後在 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 命令。