Registres
Le moteur de débogueur peut être utilisé pour examiner et modifier les registres de la cible.
Les registres disponibles sur la cible dépendent de son architecture de processeur. Pour obtenir une description des registres du processeur x86, consultez Architecture du processeur. Pour obtenir une description complète des registres disponibles pour un processeur, consultez la documentation de ce processeur.
Jeu de registres
La méthode GetNumberRegisters peut être utilisée pour rechercher le nombre de registres sur la cible.
Chaque registre est référencé par son index. L’index du premier registre est égal à zéro, et l’index du dernier est le nombre de registres moins un. Pour rechercher l’index d’un registre dont le nom est connu, utilisez GetIndexByName.
La méthode GetDescription retourne des informations sur un registre. Cela inclut le nom du registre, le type de valeurs qu’il peut contenir et s’il s’agit d’une sous-inscription.
Une sous-inscription est un registre contenu dans un autre registre. Lorsque la sous-inscription change, le registre qui le contient change également. Par exemple, sur un processeur x86, la sous-inscription ax est identique aux 16 bits faibles du registre eax 32 bits.
Il existe trois registres spéciaux dont les valeurs peuvent être trouvées à l’aide des méthodes suivantes. L’interprétation des valeurs de ces registres dépend de la plateforme.
L’emplacement de l’instruction actuelle se trouve avec GetInstructionOffset et GetInstructionOffset2.
L’emplacement de la pile du processeur actuel peut être trouvé avec GetStackOffset et GetStackOffset2.
L’emplacement du frame de pile pour la fonction actuelle peut être trouvé avec GetFrameOffset et GetFrameOffset2.
Manipulation de registres
La valeur d’un registre peut être lue à l’aide de la méthode GetValue. Vous pouvez lire plusieurs registres à l’aide de GetValues et GetValues2.
Une valeur peut être écrite dans un registre à l’aide de la méthode SetValue. Plusieurs registres peuvent être écrits à l’aide de SetValues et SetValues2.
Lors de l’écriture d’une valeur dans un registre, si la valeur fournie a un type différent de celui du registre, la valeur est convertie en type du registre. Cette conversion est la même que celle effectuée par la méthode CoerceValue. Cette conversion peut entraîner une perte de données si le type du registre n’est pas capable de contenir la valeur fournie.
Pseudo-Registers
Les pseudo-registres sont des variables gérées par le moteur de débogueur qui contiennent certaines valeurs, par exemple, $teb est le nom du pseudo-registre dont la valeur est l’adresse du bloc d’environnement de thread (TEB) du thread actuel. Pour plus d’informations et une liste des pseudo-registres, consultez Syntaxe des pseudo-registres.
Chaque pseudo-registre a un index. L’index est un nombre compris entre zéro et le nombre de pseudo-registres ( retourné par GetNumberPseudoRegisters) moins un. Pour rechercher l’index d’un pseudo-registre par son nom, utilisez GetPseudoIndexByName. Les valeurs des pseudo-registres peuvent être lues à l’aide de GetPseudoValues, et les valeurs peuvent être écrites dans des pseudo-registres à l’aide de SetPseudoValues. Pour obtenir une description d’un pseudo-registre, y compris son type, utilisez GetPseudoDescription.
Note Tous les pseudo-registres ne sont pas disponibles dans toutes les sessions de débogage ou à tout moment dans une session particulière.
Affichage des registres
Les méthodes OutputRegisters et OutputRegisters2 mettez en forme les registres de la cible et les envoient aux clients en tant que sortie.
Événements
Chaque fois que les valeurs des registres de la cible changent, le moteur appelle la méthode de rappel IDebugEventCallbacks ::ChangeDebuggeeState avec le paramètre Flags défini sur DEBUG_CDS_REGISTERS.