Utilisation de la fenêtre Espion - WinDbg (classique)
La fenêtre Espion affiche des informations sur les variables globales, les variables locales et les registres. Vous pouvez personnaliser cette fenêtre pour afficher les éléments que vous effectuez le suivi.
Ouverture de la fenêtre Espion
Pour ouvrir ou basculer vers la fenêtre Espion, dans la fenêtre WinDbg, dans le menu Affichage , cliquez sur Espion.
Vous pouvez également appuyer sur Alt+2 ou cliquer sur le bouton Espion (ALT+2) dans la barre d’outils :
Alt+Maj+2 ferme la fenêtre Espion.
La capture d’écran suivante montre un exemple de fenêtre Espion.
La fenêtre Espion peut contenir quatre colonnes. Les colonnes Nom et Valeur sont toujours affichées, et les colonnes Type et Emplacement sont facultatives. Pour afficher les colonnes Type et Emplacement , cliquez sur les boutons Typecast et Emplacements , respectivement, dans la barre d’outils.
Dans la fenêtre Espion, vous pouvez effectuer les opérations suivantes :
Pour ajouter une variable à la fenêtre Espion, sélectionnez la première cellule vide dans la colonne Nom , tapez le nom de la variable, puis appuyez sur Entrée. Séparez le nom du module de la variable avec un point d’exclamation ( !). Si vous ne spécifiez pas de module, le module actuel est utilisé. Pour entrer une adresse dans le champ Nom , l’adresse doit commencer par un chiffre décimal (si nécessaire, utilisez le préfixe 0x).
Si le nom de la variable que vous avez entré est défini dans l’étendue de la fonction actuelle, sa valeur apparaît dans la colonne Valeur . Si elle n’est pas définie, la colonne Valeuraffiche « Erreur : Impossible d’obtenir la valeur ».
Même si aucune variable n’est définie, il peut être utile de l’ajouter à la fenêtre Espion. Si le compteur du programme entre dans une fonction dans laquelle une variable de ce nom est définie, sa valeur apparaît dans la fenêtre à ce moment-là.
Pour supprimer une variable de la fenêtre Espion, double-cliquez sur son nom, appuyez sur SUPPR, puis appuyez sur ENTRÉE. Vous pouvez également remplacer un ancien nom par un nouveau nom en double-cliquant sur l’ancien nom, en tapant le nouveau nom, puis en appuyant sur Entrée.
Si une variable est une structure de données, une zone case activée s’affiche en regard de son nom. Pour développer et réduire l’affichage des membres de la structure, sélectionnez ou désactivez la zone case activée.
Les entiers de type int sont affichés sous forme de valeurs décimales ; les entiers de type UINT sont affichés dans le radix actuel. Pour modifier le radix actuel, utilisez la commande n (Définir la base du nombre) dans la fenêtre Commande du débogueur.
Pour modifier la valeur d’une variable locale, double-cliquez sur sa cellule Value . Entrez la nouvelle valeur ou modifiez l’ancienne valeur. (Les commandes couper, copier et coller peuvent être utilisées pour la modification.) La valeur que vous entrez peut inclure n’importe quelle expression C++. Après avoir entré une nouvelle valeur ou modifié l’ancienne valeur, vous pouvez appuyer sur Entrée pour stocker la nouvelle valeur ou sur Échap pour l’ignorer. Si vous envoyez une valeur non valide, l’ancienne valeur réapparaît après avoir appuyé sur Entrée.
Les entiers de type int sont affichés sous forme de valeurs décimales ; les entiers de type UINT sont affichés dans le radix actuel. Pour modifier le radix actuel, utilisez la commande n (Définir la base du nombre) dans la fenêtre Commande du débogueur.
La colonne Type (si elle est affichée dans la fenêtre Espion) affiche le type de données actuel de chaque variable. Chaque variable est affichée dans le format approprié pour son propre type de données. Les structures de données ont leurs noms de type dans la colonne Type . D’autres types de variables affichent « Entrer un nouveau type » dans cette colonne.
Si vous double-cliquez sur « Entrer un nouveau type », vous pouvez convertir le type en entrant un nouveau type de données. Ce cast modifie l’affichage actuel de cette variable uniquement dans la fenêtre Espion ; elle ne change rien dans le débogueur ou sur l’ordinateur cible. En outre, si vous entrez une nouvelle valeur dans la colonne Valeur , le texte que vous entrez sera analysé en fonction du type réel du symbole, plutôt que de tout nouveau type que vous avez peut-être entré dans la colonne Type. Si vous fermez et rouvrez la fenêtre Espion, vous perdrez les modifications de type de données.
Vous pouvez également entrer une commande d’extension dans la colonne Type . Le débogueur transmet l’adresse du symbole à cette extension et affiche la sortie résultante dans une série de lignes réductibles sous la ligne actuelle. Par exemple, si le symbole de cette ligne est une adresse valide pour un bloc d’environnement de thread, vous pouvez entrer !teb dans la colonne Type pour exécuter l’extension !teb sur l’adresse de ce symbole.
La colonne Emplacement (si elle est affichée dans la fenêtre Espion) affiche le décalage de chaque membre d’une structure de données.
En plus des variables, vous pouvez également surveiller les éléments suivants dans la fenêtre Espion :
- Registres. Lorsque vous ajoutez un registre à la fenêtre Espion, préfixez son nom d’un signe at (@). Contrairement aux variables, vous ne pouvez pas modifier les valeurs de registre via la fenêtre Espion.
- Tables virtuelles qui contiennent des pointeurs de fonction. Lorsqu’une table virtuelle s’affiche dans la fenêtre Espion, vous pouvez parcourir les entrées de fonction dans la table. Si une table Vtable est contenue dans une classe de base qui pointe vers une implémentation dérivée, la notation _vtcast_Class s’affiche pour indiquer les membres qui sont ajoutés en raison de la classe dérivée. Ces membres se développent comme le type de classe dérivé.
- Valeurs de retour des fonctions d’extension, telles que _EFN_GetPoolData.
Contrairement à la fenêtre Locals, la fenêtre Espion n’est pas affectée par les modifications apportées au contexte d’inscription. Dans la fenêtre Espion, vous pouvez voir et modifier uniquement les variables définies dans l’étendue du compteur de programme actuel.
Si vous ouvrez un nouvel espace de travail, le contenu de la fenêtre Espion est ignoré et remplacé par celui du nouvel espace de travail.
Barre d’outils et menu contextuel
La fenêtre Espion a une barre d’outils qui contient deux boutons (Typecast et Emplacements) et un menu contextuel avec des commandes supplémentaires. Pour accéder au menu, cliquez avec le bouton droit sur la barre de titre de la fenêtre ou cliquez sur l’icône située dans le coin supérieur droit de la fenêtre :
La barre d’outils et le menu contiennent les boutons et commandes suivants :
(Barre d’outils et menu) Typecast active et désactive l’affichage de la colonne Type .
(Barre d’outils et menu) Emplacements active et désactive l’affichage de la colonne Emplacement .
(Menu uniquement) Affiche les valeurs 16 bits en tant qu’Unicode affiche les chaînes Unicode dans cette fenêtre. Cette commande active et désactive un paramètre global qui affecte la fenêtre Locals, la fenêtre Espion et la sortie de la commande du débogueur. Cette commande équivaut à utiliser la commande .enable_unicode (Activer l’affichage Unicode).
(Menu uniquement) Toujours afficher des nombres dans le radix par défaut entraîne l’affichage des entiers dans le radix par défaut au lieu de toujours les afficher au format décimal. Cette commande active et désactive un paramètre global qui affecte la fenêtre Locals, la fenêtre Espion et la sortie de la commande du débogueur. Cette commande équivaut à utiliser la commande .force_radix_output (Utiliser Radix pour les entiers).
Note La commande Toujours afficher les nombres dans radix par défaut n’affecte pas les entiers longs. Les entiers longs sont affichés au format décimal, sauf si la commande .enable_long_status (Activer l’affichage des entiers longs) est utilisée. La commande .enable_long_status affecte l’affichage dans la fenêtre Locals, la fenêtre Espion et la sortie de la commande du débogueur. Il n’existe aucun équivalent pour cette commande dans le menu de la fenêtre Espion.
(Menu uniquement) Ouvrir la fenêtre mémoire pour la valeur sélectionnée ouvre une nouvelle fenêtre Mémoire ancrée qui affiche la mémoire en commençant à l’adresse de l’expression sélectionnée.
(Menu uniquement) Appeler dt pour la valeur de mémoire sélectionnée exécute la commande dt (type d’affichage) avec le symbole sélectionné comme paramètre. Le résultat s’affiche dans la fenêtre Commande du débogueur. L’option -n est automatiquement utilisée pour différencier le symbole d’une adresse hexadécimale. Aucune autre option n’est utilisée. Notez que le contenu produit à l’aide de cette sélection de menu est identique au contenu produit lors de l’exécution de la commande dt à partir de la ligne de commande, mais que le format est légèrement différent.
(Menu uniquement) Barre d’outils active et désactive la barre d’outils.
(Menu uniquement) Ancrer ou Undock entraîne l’entrée ou la sortie de la fenêtre dans l’état d’ancrage.
(Menu uniquement) Passer à la nouvelle station d’accueil ferme la fenêtre Espion et l’ouvre dans une nouvelle station d’accueil.
(Menu uniquement) Le paramètre Défini comme cible de tabulation pour le type de fenêtre n’est pas disponible pour la fenêtre Espion. Cette option est disponible uniquement pour les fenêtres Source ou Mémoire .
(Menu uniquement) Toujours flottante fait que la fenêtre reste déséquilibrée même si elle est déplacée vers un emplacement d’ancrage.
(Menu uniquement) Le déplacement avec le cadre entraîne le déplacement de la fenêtre lorsque le cadre WinDbg est déplacé, même si la fenêtre est désacfinée.
(Menu uniquement) L’aide ouvre cette rubrique dans la documentation Outils de débogage pour Windows.
(Menu uniquement) Fermer ferme cette fenêtre.
Voir aussi
Pour plus d’informations sur le contrôle des variables et une description d’autres commandes liées à la mémoire, consultez Lecture et écriture de la mémoire. Pour plus d’informations sur les registres et leur manipulation, consultez Affichage et modification des registres dans WinDbg (classique) .