Interaction avec le moteur
Commandes et expressions
L’API du moteur de débogueur fournit des méthodes pour exécuter des commandes et évaluer des expressions, comme celles tapées dans la fenêtre de commande du débogueur de WinDbg. Pour exécuter une commande de débogueur, utilisez Exécuter. Ou, pour exécuter toutes les commandes d’un fichier, utilisez ExecuteCommandFile.
La méthode Evaluate évalue les expressions à l’aide de la syntaxe C++ ou MASM. La syntaxe utilisée par le moteur de débogueur pour évaluer des expressions, comme dans la méthode Evaluate , est donnée par GetExpressionSyntax et peut être modifiée à l’aide de SetExpressionSyntaxByName et SetExpressionSyntax. Le nombre de différentes syntaxes reconnues par le débogueur est retourné par GetNumberExpressionSyntaxes, et leurs noms sont retournés par GetExpressionSyntaxNames.
Le type de valeur retourné par Evaluate est déterminé par les symboles et constantes utilisés dans la chaîne qui a été évaluée. La valeur est contenue dans une structure DEBUG_VALUE et peut être convertie en différents types à l’aide de CoerceValue et CoerceValues.
Alias
Les alias sont des chaînes de caractères qui sont automatiquement remplacées par d’autres chaînes de caractères lorsqu’elles sont utilisées dans les commandes et expressions du débogueur. Pour obtenir une vue d’ensemble des alias, consultez Utilisation d’alias. Le moteur de débogueur a plusieurs classes d’alias.
Les alias de nom fixe sont indexés par numéro et ont les noms $u 0, $u 1, ..., $u 9. Les valeurs de ces alias peuvent être définies à l’aide de la méthode SetTextMacro et peuvent être récupérées à l’aide de la méthode GetTextMacro .
Les alias automatiques et les alias nommés par l’utilisateur peuvent avoir n’importe quel nom. Les alias automatiques sont définis par le moteur du débogueur et les alias nommés par l’utilisateur par le biais de commandes de débogueur ou de l’API du moteur de débogueur. Pour définir ou supprimer un alias nommé par l’utilisateur, utilisez la méthode SetTextReplacement . La méthode GetTextReplacement retourne le nom et la valeur d’un alias automatique ou d’un alias nommé par l’utilisateur. Tous les alias nommés par l’utilisateur peuvent être supprimés à l’aide de la méthode RemoveTextReplacements . La méthode GetNumberTextReplacements retourne le nombre de noms d’utilisateur et d’alias automatiques ; vous pouvez l’utiliser avec GetTextReplacement pour itérer sur tous ces alias. La méthode OutputTextReplacements imprime une liste de tous les alias nommés par l’utilisateur, y compris leurs noms et valeurs.
Notez que si un alias nommé par l’utilisateur reçoit le même nom qu’un alias automatique, l’alias nommé par l’utilisateur masque l’alias automatique de sorte que lors de la récupération de la valeur de l’alias par son nom, l’alias nommé par l’utilisateur est utilisé.
>Options du moteur
Le moteur dispose d’un certain nombre d’options qui contrôlent son comportement. Ces options sont répertoriées dans DEBUG_ENGOPT_XXX. Ils sont retournés par GetEngineOptions et peuvent être définis à l’aide de SetEngineOptions. Vous pouvez définir des options individuelles à l’aide de AddEngineOptions et les annuler à l’aide de RemoveEngineOptions.
Interruptions
Une interruption est un moyen de forcer une pause dans le débogueur ou d’indiquer au moteur d’arrêter le traitement de la commande actuelle, par exemple, en appuyant sur Ctrl+Arrêt dans WinDbg.
Pour demander une pause dans le débogueur ou pour interrompre la tâche actuelle du débogueur, utilisez SetInterrupt. Pour case activée en cas d’interruption, utilisez GetInterrupt.
Note Lors de l’exécution d’une tâche longue à partir d’une extension de débogueur, il est recommandé que l’extension case activée Régulièrement GetInterrupt et d’arrêter le traitement si une interruption a été demandée.
Lors de la demande d’une pause dans le débogueur, le moteur peut expirer si la cible met trop de temps à effectuer l’effraction. Cela peut se produire si la cible est dans un état non réactif ou si la demande d’effraction est bloquée ou retardée par une contention de ressources. La durée d’attente du moteur est retournée par GetInterruptTimeout et peut être définie à l’aide de SetInterruptTimeout.