Verwenden von DBH
DBH ist ein Befehlszeilentool, das viele der Funktionen in der DbgHelp-API (dbghelp.dll) verfügbar macht. Sie kann Informationen über den Inhalt einer Symboldatei anzeigen, bestimmte Details der Symbole in der Datei anzeigen und die Datei nach Symbolen durchsuchen, die verschiedenen Kriterien entsprechen. Weitere Informationen finden Sie in der Debughilfebibliothek.
Die von DBH bereitgestellte Funktionalität ähnelt der funktion, die in WinDbg, KD und CDB durch Befehle wie x (Prüfsymbole) bereitgestellt wird.
Sie beginnen DBH mit einer einfachen Befehlszeile, in der Sie das Zielmodul angeben, dessen Symbole Sie untersuchen möchten. Ein Zielmodul kann ein EXE-Programm oder eine PDB-Symboldatei sein. Sie können auch eine Prozess-ID (PID) angeben, die untersucht werden soll. Die vollständige Syntax finden Sie unter DBH-Befehlszeilenoptionen.
Wenn DBH gestartet wird, werden die Symbole für das angegebene Modul geladen und anschließend eine Eingabeaufforderung angezeigt, an der Sie eine Vielzahl von Befehlen eingeben können. Eine Liste der verfügbaren Befehle finden Sie unter DBH-Befehle.
Die folgende Sequenz startet z. B. DBH durch Angeben des Zielprozesses mit der Prozess-ID 4672, führt dann den Enumerationsbefehl an der DBH-Eingabeaufforderung aus, um Symbole anzuzeigen, die einem bestimmten Muster entsprechen, und führt dann den Befehl q aus, um DBH zu beenden:
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
Wenn Sie nur einen einzigen DBH-Befehl ausführen möchten, können Sie ihn am Ende der Befehlszeile angeben. Dadurch wird DBH gestartet, das angegebene Modul geladen, der angegebene Befehl ausgeführt und dann beendet.
Beispielsweise könnte das vorherige Beispiel durch eine einzelne Befehlszeile ersetzt werden:
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
Diese Methode der Ausführung von DBH wird als Batchmodus bezeichnet, da sie einfach in Batchdateien verwendet werden kann. Auf diese Version der Befehlszeile kann auch eine Pipe ( | ) folgen, die die DBH-Ausgabe an ein anderes Programm umleitet.
DBH kann ein Ziel auf drei Arten auswählen: durch die Prozess-ID eines ausgeführten Prozesses, anhand des Namens der ausführbaren Datei oder anhand des Namens der Symboldatei. Wenn beispielsweise genau eine Instanz von derzeit ausgeführten MyProg.exe mit prozess-ID 1234 vorhanden ist, sind die folgenden Befehle nahezu gleichwertig:
C:\> dbh -v -p:1234
C:\> dbh -v c:\mydir\myprog.exe
C:\> dbh -v c:\mydir\myprog.pdb
Ein Unterschied zwischen diesen Befehlen besteht darin, dass DBH beim Starten von DBH durch Angeben der Prozess-ID die tatsächlichen virtuellen Adressen verwendet, die von diesem Prozess verwendet werden. Wenn Sie DBH starten, indem Sie den ausführbaren Namen oder den Symboldateinamen angeben, geht DBH davon aus, dass die Basisadresse des Moduls ein Standardwert ist (z. B. 0x01000000). Anschließend können Sie den Basisbefehl verwenden, um die tatsächliche Basisadresse anzugeben, wodurch die Adressen aller Symbole im Modul verschoben werden.
DBH fügt nicht auf die Art und Weise, wie ein Debugger funktioniert, an den Zielprozess an. DBH kann weder dazu führen, dass ein Prozess beginnt oder beendet wird, noch kann er die Ausführung dieses Prozesses ändern. Damit DBH mit einer Prozess-ID an einen Prozess anfügen kann, muss der Zielprozess ausgeführt werden, aber nachdem DBH gestartet wurde, kann der Zielprozess beendet werden, und DBH greift weiterhin auf seine Symbole zu.
DbH verwendet standardmäßig nicht bewertete Symbolnamen beim Anzeigen und Suchen nach Symbolen. Wenn Sie die Option "SYMOPT_UNDNAME Symbol" deaktivieren oder die Option "-d" in die DbH-Befehlszeile einschließen, werden Dekorationen einbezogen.
Informationen zu Symbol-Dekorationen finden Sie unter "Öffentliche und private Symbole".
Verwenden Sie zum Beenden von DBH den Befehl "q " an der DBH-Eingabeaufforderung.