Partager via


Utilisation de DBH

DBH est un outil en ligne de commande qui expose de nombreuses fonctions dans l’API DbgHelp (dbghelp.dll). Il peut afficher des informations sur le contenu d’un fichier de symboles, afficher des détails spécifiques des symboles dans le fichier et rechercher des symboles correspondant à différents critères. Pour plus d’informations, consultez La bibliothèque d’aide de débogage.

La fonctionnalité fournie par DBH est similaire à celle fournie dans WinDbg, KD et CDB par commandes telles que x (Examiner les symboles).

Exécution de DBH en mode interactif

Vous démarrez DBH avec une ligne de commande simple, sur laquelle vous spécifiez le module cible dont vous souhaitez examiner les symboles. Un module cible peut être un programme EXE ou un fichier de symboles PDB. Vous pouvez également spécifier un ID de processus (PID) à examiner. Consultez les options de ligne de commande DBH pour obtenir la syntaxe complète.

Au démarrage de DBH, il charge les symboles du module spécifié, puis vous présente une invite à laquelle vous pouvez taper une variété de commandes. Consultez les commandes DBH pour obtenir la liste des commandes disponibles.

Par exemple, la séquence suivante démarre DBH en spécifiant le processus cible avec l’ID de processus 4672, puis exécute la commande enum à l’invite DBH pour afficher des symboles correspondant à un modèle spécifique, puis exécute la commande q pour quitter 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 

Exécution de DBH en mode Batch

Si vous souhaitez exécuter une seule commande DBH, vous pouvez la spécifier à la fin de la ligne de commande. Cela entraîne le démarrage de DBH, le chargement du module spécifié, l’exécution de la commande spécifiée, puis la sortie.

Par exemple, l’exemple précédent peut être remplacé par une seule ligne de commande :

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 

Cette méthode d’exécution de DBH est appelée mode batch, car elle peut être facilement utilisée dans les fichiers batch. Cette version de la ligne de commande peut également être suivie d’un canal ( | ) qui redirige la sortie DBH vers un autre programme.

Spécification de la cible

DBH peut sélectionner une cible de trois façons : par l’ID de processus d’un processus en cours d’exécution, par le nom de l’exécutable ou par le nom du fichier de symboles. Par exemple, s’il existe exactement une instance de MyProg.exe en cours d’exécution, avec l’ID de processus 1234, les commandes suivantes sont presque équivalentes :

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

Une différence entre ces commandes est que lorsque vous démarrez DBH en spécifiant l’ID de processus, DBH utilise les adresses virtuelles réelles utilisées par ce processus. Lorsque vous démarrez DBH en spécifiant le nom exécutable ou le nom du fichier de symboles, DBH suppose que l’adresse de base du module est une valeur standard (par exemple, 0x01000000). Vous pouvez ensuite utiliser la commande de base pour spécifier l’adresse de base réelle, ce qui déplace les adresses de tous les symboles du module.

DBH ne s’attache pas au processus cible de la façon dont un débogueur le fait. DBH ne peut pas entraîner le début ou la fin d’un processus, ni modifier la façon dont ce processus s’exécute. Pour que DBH s’attache à un processus par son ID de processus, le processus cible doit être en cours d’exécution, mais une fois que DBH a démarré le processus cible peut être arrêté et DBH continue d’accéder à ses symboles.

Symboles décorés et non décorés

Par défaut, DBH utilise des noms de symboles non codés lors de l’affichage et de la recherche de symboles. Si vous désactivez l’option de symbole SYMOPT_UNDNAME ou si vous incluez l’option -d sur la ligne de commande DBH, les décorations seront incluses.

Pour plus d’informations sur les décorations de symboles, consultez Symboles publics et privés.

Sortie de DBH

Pour quitter DBH, utilisez la commande q à l’invite DBH.