Partager via


Utilisation du débogueur et du Logexts.dll

Une façon d’activer Logger consiste à démarrer CDB ou WinDbg et à l’attacher à une application cible en mode utilisateur comme d’habitude. Ensuite, utilisez la commande d’extension !logexts.logi ou !logexts.loge .

Cela permet d’insérer du code au point d’arrêt actuel qui passera à une routine qui charge et initialise Logexts.dll dans le processus d’application cible. Il s’agit de « l’injection de l’enregistreur d’événements dans l’application cible ».

Il y aura en fait deux instances de Logexts.dll en cours d’exécution, car ce module est à la fois une DLL d’extension de débogueur et le programme injecté dans l’application cible. Le débogueur et les instances cibles de Logexts.dll communiquer via une section de mémoire partagée qui comprend les handles de fichier de sortie, le masque de catégorie actuelle et un pointeur vers la mémoire tampon de sortie du journal.

Attachement à l’application cible

Pour plus d’informations sur l’attachement du débogueur à l’application cible, consultez Débogage d’un processus User-Mode à l’aide de WinDbg ou Débogage d’un processus User-Mode à l’aide de CDB.

Utilisation des commandes d’extension logger

Pour obtenir la syntaxe complète de chaque extension, consultez sa page de référence.

!logexts.logi
Injecte Logger dans l’application cible. Cela initialise la journalisation, mais ne l’active pas.

!logexts.loge
Active la journalisation. Si !logexts.logi n’a pas été utilisé, cette extension initialise, puis active la journalisation.

!logexts.logd
Désactive la journalisation. Cela entraîne la suppression de tous les crochets d’API afin de permettre au programme de s’exécuter librement. Les crochets COM ne sont pas supprimés, car ils ne peuvent pas être réactivés à volonté.

!logexts.logo
Affiche ou modifie les options de sortie. Trois types de sortie sont possibles : les messages envoyés directement au débogueur, un fichier texte ou un fichier .lgv. Le fichier .lgv contient beaucoup plus d’informations que les deux autres ; il peut être lu avec LogViewer.

Si vous désactivez la sortie du fichier texte, un fichier .txt de taille zéro est toujours créé. Cela peut remplacer un fichier texte précédemment enregistré au même emplacement.

!logexts.logc
Affiche les catégories d’API disponibles, contrôle les catégories qui seront journalisées et celles qui ne le seront pas, et affiche les API contenues dans n’importe quelle catégorie.

Si une catégorie est désactivée, les crochets pour toutes les API de cette catégorie seront supprimés afin qu’il n’y ait plus de surcharge de performances. Les crochets COM ne sont pas supprimés, car ils ne peuvent pas être réactivés à volonté.

L’activation de certaines catégories uniquement peut être utile lorsque vous êtes uniquement intéressé par un type particulier d’interaction que le programme a avec Windows, par exemple, les opérations de fichier. Cela réduit la taille du fichier journal et réduit également l’effet de Logger sur la vitesse d’exécution du processus.

!logexts.logb
Affiche ou vide la mémoire tampon de sortie actuelle. Pour tenir compte des performances, la sortie du journal est vidée sur le disque uniquement lorsque la mémoire tampon de sortie est pleine. Par défaut, la mémoire tampon est de 2144 octets.

Étant donné que la mémoire tampon est gérée par l’application cible, l’écriture automatique de la mémoire tampon dans les fichiers journaux sur le disque ne se produit pas en cas de violation d’accès ou d’une autre erreur non récupérable dans l’application cible. Dans ce cas, vous devez utiliser cette commande pour vider manuellement la mémoire tampon sur le disque, sinon les API les plus récentes enregistrées peuvent ne pas apparaître dans les fichiers journaux.

!logexts.logm
Affiche ou crée une liste d’inclusion/exclusion de module. Il est souvent souhaitable de consigner uniquement les appels d’API effectués à partir d’un module ou d’un ensemble de modules donnés. Pour faciliter cela, Logger vous permet de spécifier une liste d’inclusion de modules ou, sinon, une liste d’exclusion de module. Par instance, vous utilisez une liste d’inclusion si vous souhaitez uniquement journaliser les appels à partir d’un ou deux modules. Si vous souhaitez journaliser les appels effectués à partir de tous les modules, à l’exception d’une courte liste de modules, vous devez utiliser une liste d’exclusions. Les modules Logexts.dll et Kernel32.dll sont toujours exclus, car Logger n’est pas autorisé à se journaliser.