Freigeben über


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.

Ausführen von DBH im interaktiven Modus

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 

Ausführen von DBH im Batchmodus

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.

Angeben des Ziels

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.

Verzierte und nicht verschönerte Symbole

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".

Beenden von DBH

Verwenden Sie zum Beenden von DBH den Befehl "q " an der DBH-Eingabeaufforderung.