Dela via


Att använda DBH

DBH är ett kommandoradsverktyg som exponerar många av funktionerna i DbgHelp API (dbghelp.dll). Den kan visa information om innehållet i en symbolfil, visa specifik information om symbolerna i filen och söka i filen efter symboler som matchar olika kriterier. Mer information finns i Felsökningshjälpbiblioteket.

Funktionen som tillhandahålls av DBH liknar de som tillhandahålls i WinDbg, KD och CDB genom kommandon som x (Granska symboler).

att köra DBH i interaktivt läge

Du startar DBH med en enkel kommandorad där du anger den målmodul vars symboler du vill undersöka. En målmodul kan vara ett EXE-program eller en PDB-symbolfil. Du kan också ange ett process-ID (PID) som ska undersökas. Se DBH Command-Line Alternativ för den fullständiga syntaxen.

När DBH startar läser den in symbolerna för den angivna modulen och visar sedan en uppmaning där du kan ange en mängd olika kommandon. En lista över tillgängliga kommandon finns i DBH-kommandon.

Följande sekvens startar till exempel DBH genom att ange målprocessen med process-ID 4672 och kör sedan kommandot uppräkning i DBH-prompten för att visa symboler som matchar ett specifikt mönster och kör sedan kommandot q för att avsluta 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 

att köra DBH i batchläge

Om du bara vill köra ett enda DBH-kommando kan du ange det i slutet av kommandoraden. Detta gör att DBH startar, läser in den angivna modulen, kör det angivna kommandot och avslutar sedan.

Det föregående exemplet kan till exempel ersättas med en enda kommandorad:

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 

Den här metoden för att köra DBH kallas batchlägeeftersom den enkelt kan användas i batchfiler. Den här versionen av kommandoraden kan också följas av ett pipe (| ) som omdirigerar DBH-utdata till ett annat program.

Ange målet

DBH kan välja ett mål på tre sätt: med process-ID för en process som körs, med namnet på den körbara filen eller med namnet på symbolfilen. Om det till exempel för närvarande finns exakt en instans av MyProg.exe som körs med process-ID 1234, är följande kommandon nästan likvärdiga:

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

En skillnad mellan dessa kommandon är att när du startar DBH genom att ange process-ID använder DBH de faktiska virtuella adresser som används av den här processen. När du startar DBH genom att ange det körbara namnet eller symbolfilens namn förutsätter DBH att modulens basadress är ett standardvärde (till exempel 0x01000000). Du kan sedan använda kommandot base för att ange den faktiska basadressen och därmed flytta adresserna för alla symboler i modulen.

DBH ansluter inte till målprocessen på det sätt som ett felsökningsprogram gör. DBH kan inte orsaka att en process börjar eller slutar, och den kan inte heller ändra hur processen körs. För att DBH ska kunna ansluta till en process med dess process-ID måste målprocessen köras, men när DBH har startats kan målprocessen avslutas och DBH fortsätter att komma åt dess symboler.

dekorerade och odekorerade symboler

Som standard använder DBH odekorerade symbolnamn när du visar och söker efter symboler. Om du inaktiverar alternativet SYMOPT_UNDNAME symbol eller inkluderar alternativet -d på DBH-kommandoraden inkluderas dekorationer.

Information om symboldekorationer finns i offentliga och privata symboler.

avslutar DBH

Om du vill avsluta DBH använder du kommandot q i DBH-prompten.