API d’extension de programmation du débogueur

Cette section comprend :

Vue d’ensemble du moteur de débogueur

Utilisation de l’API du moteur de débogueur

Écriture d’extensions DbgEng

EngExtCpp Extensions

Écriture d’extensions WdbgExts

Personnalisation de la sortie du débogueur à l’aide de DML

Utilisation de JavaScript pour étendre les fonctionnalités du débogueur

Développer des modules d’extensibilité du transport KDNET

Cette documentation explique comment utiliser des interfaces telles que celles fournies par le moteur de débogueur pour écrire des extensions qui s’exécuteront dans WinDbg, KD, CDB et NTSD. Ces extensions de débogueur peuvent être utilisées lors de l’exécution du débogage en mode utilisateur ou en mode noyau.

Moteur de débogueur

Le moteur de débogueur fournit une interface permettant d’examiner et de manipuler les cibles de débogage en mode utilisateur et en mode noyau.

Le moteur de débogueur peut acquérir des cibles, définir des points d’arrêt, surveiller les événements, les symboles de requête, la mémoire de lecture et d’écriture et contrôler les threads et les processus dans une cible.

Vous pouvez utiliser le moteur de débogueur pour écrire à la fois des bibliothèques d’extensions de débogueur et des applications autonomes. Ces applications sont des applications de moteur de débogueur. Une application de moteur de débogueur qui utilise toutes les fonctionnalités du moteur de débogueur est un débogueur. Par exemple, WinDbg, CDB, NTSD et KD sont des débogueurs ; le moteur de débogueur fournit le cœur de leurs fonctionnalités.

L’API du moteur de débogueur est spécifiée par les prototypes dans le fichier d’en-tête dbgeng.h.

Pour plus d’informations, consultez Vue d’ensemble du moteur de débogueur et Utilisation de l’API du moteur de débogueur.

Extensions

Vous pouvez créer vos propres commandes de débogage en écrivant et en créant une DLL d’extension. Par exemple, vous pouvez écrire une commande d’extension pour afficher une structure de données complexe.

Il existe trois types de DLL d’extension de débogueur :

  • DLL d’extension DbgEng. Celles-ci sont basées sur les prototypes du fichier d’en-tête dbgeng.h. Chaque DLL de ce type peut exporter des commandes d’extension DbgEng. Ces commandes d’extension utilisent l’API moteur de débogueur et peuvent également utiliser l’API WdbgExts.

    Pour plus d’informations, consultez Écriture d’extensions DbgEng.

  • DLL d’extension EngExtCpp. Celles-ci sont basées sur les prototypes des fichiers d’en-tête engextcpp.h et dbgeng.h. Chaque DLL de ce type peut exporter des commandes d’extension DbgEng. Ces commandes d’extension utilisent à la fois l’API moteur de débogueur et l’infrastructure d’extension EngExtCpp, et peuvent également utiliser l’API WdbgExts.

  • DLL d’extension WdbgExts. Celles-ci sont basées sur les prototypes du fichier d’en-tête wdbgexts.h. Chaque DLL de ce type exporte une ou plusieurs commandes d’extension WdbgExts. Ces commandes d’extension utilisent exclusivement l’API WdbgExts. Pour plus d’informations , consultez Écriture d’extensions WdbgExts.

L’API DbgEng peut être utilisée pour créer des extensions ou des applications autonomes. L’API WdbgExts contient un sous-ensemble des fonctionnalités de l’API du moteur de débogueur et ne peut être utilisée que par les extensions.

Toutes les extensions de débogueur doivent être compilées et générées à l’aide de Visual Studio.

Les exemples de code d’extension sont installés dans le cadre du package Outils de débogage pour Windows si vous effectuez une installation personnalisée et sélectionnez le composant SDK et tous ses sous-composants. Ils se trouvent dans le sous-répertoire sdk\samples du répertoire d’installation Outils de débogage pour Windows.

Le moyen le plus simple d’écrire de nouvelles extensions de débogueur consiste à étudier les exemples d’extensions. Chaque exemple d’extension inclut des fichiers makefile et des fichiers sources à utiliser avec l’utilitaire Build. Les deux types d’extensions sont représentés dans les exemples.

Écriture d’extensions de débogueur d’analyse personnalisée

Vous pouvez étendre les fonctionnalités de la commande !analyze débogueur en écrivant un plug-in d’extension d’analyse. En fournissant un plug-in d’extension d’analyse, vous pouvez participer à l’analyse d’un bogue case activée ou d’une exception d’une manière spécifique à votre propre composant ou application. Lorsque vous écrivez un plug-in d’extension d’analyse, vous écrivez également un fichier de métadonnées qui décrit les situations pour lesquelles vous souhaitez que votre plug-in soit appelé. Lorsque !analyze s’exécute, il localise, charge et exécute les plug-ins d’extension d’analyse appropriés. Pour plus d’informations, consultez Écriture d’extensions de débogueur d’analyse personnalisée

Personnalisation de la sortie du débogueur à l’aide de DML

Vous pouvez personnaliser la sortie du débogueur à l’aide de DML. Pour plus d’informations, consultez Personnalisation de la sortie du débogueur à l’aide de DML.

Utilisation de JavaScript pour étendre les fonctionnalités du débogueur

Utilisez JavaScript pour créer des scripts qui comprennent les objets du débogueur et étendent et personnalisent les fonctionnalités du débogueur. Les fournisseurs JavaScript établissent un pont entre un langage de script et le modèle objet interne du débogueur. Le fournisseur de script du débogueur JavaScript permet l’utilisation de JavaScript avec le débogueur. Pour plus d’informations, consultez Script du débogueur JavaScript.

Développer des modules d’extensibilité du transport KDNET

Le transport KDNET peut être étendu pour s’exécuter sur n’importe quel matériel à l’aide d’une dll de module d’extensibilité de pilote matériel distincte. Les modules d’extensibilité du transport KDNET sont développés par des fournisseurs de carte réseau pour ajouter la prise en charge du débogage du noyau à des cartes réseau spécifiques.

KDNET est un transport de débogage de noyau qui permet le débogage de noyau de fenêtres sur un réseau. Il est conçu de sorte que la couche de prise en charge matérielle soit intégrée dans un module distinct du traitement des paquets réseau et de la couche d’interface du noyau. Cette couche de prise en charge du pilote matériel est appelée module d’extensibilité KDNET. Pour plus d’informations, consultez Développer des modules d’extensibilité du transport KDNET.