Utiliser les fenêtres Mémoire dans le débogueur Visual Studio (C#, C++, Visual Basic, F#)

Durant le débogage, la fenêtre Mémoire montre l’espace mémoire utilisé par votre application.

Les fenêtres du débogueur telles que Espion, Automatique et Variables locales ainsi que la boîte de dialogue Espion express vous montrent les variables qui sont stockées à des emplacements spécifiques en mémoire. La fenêtre Mémoire vous montre une vue d’ensemble. La vue Mémoire est pratique pour examiner de grandes quantités de données (mémoires tampons ou grandes chaînes, par exemple) qui ne s’affichent pas correctement dans les autres fenêtres.

La fenêtre Mémoire ne se limite pas à l’affichage des données. Elle affiche tout ce qui se trouve dans l’espace mémoire, qu’il s’agisse de données, de code et de bits de mémoire aléatoires dans la mémoire non affectée.

La fenêtre Mémoire n’est pas disponible pour le débogage de script ou de code SQL. Ces langages ne reconnaissent pas le concept de mémoire.

Ouvrir une fenêtre Mémoire

Comme les autres fenêtres du débogueur, les fenêtres Mémoire sont disponibles uniquement durant une session de débogage.

Important

Pour activer la fenêtre Mémoire, vous devez sélectionner Activer le débogage au niveau de l’adresse dans Outils>Options (ou Déboguer>Options) >Débogage>Général.

Pour ouvrir une fenêtre Mémoire

  1. Vérifiez que l’option Activer le débogage au niveau de l’adresse est sélectionnée dans Outils>Options (ou Déboguer>Options) >Débogage>Général.

  2. Démarrez le débogage en sélectionnant la flèche verte, puis en appuyant sur F5 ou en sélectionnant Déboguer>Démarrer le débogage.

  3. Sous Déboguer>Windows>Mémoire, sélectionnez Mémoire 1, Mémoire 2, Mémoire 3 ou Mémoire 4. (Certaines éditions de Visual Studio n’offrent qu’une seule fenêtre Mémoire.)

Se déplacer dans la fenêtre Mémoire

L’espace d’adressage d’un ordinateur est grand. Vous pouvez facilement vous laisser distraire si vous avez besoin de faire défiler la fenêtre Mémoire.

Les adresses mémoire supérieures s'affichent au bas de la fenêtre. Pour voir une adresse supérieure, faites défiler l’affichage vers le bas. Pour voir une adresse inférieure, faites défiler l’affichage vers le haut.

Vous pouvez accéder instantanément à une adresse spécifique dans la fenêtre Mémoire par glisser-déposer, ou en entrant l’adresse dans le champ Adresse. Le champ Adresse accepte les adresses alphanumériques et les expressions dont les évaluations correspondent à des adresses, par exemple e.User.NonroamableId.

Pour forcer la réévaluation immédiate d’une expression dans le champ Adresse, sélectionnez l’icône en forme de flèche arrondie Réévaluer automatiquement.

Par défaut, la fenêtre Mémoire traite les expressions du champ Adresse comme des expressions dynamiques, qui sont réévaluées au fur et à mesure de l’exécution de l’application. Les expressions dynamiques peuvent être utiles, par exemple pour voir la mémoire touchée par une variable de pointeur.

Pour utiliser le glisser-déposer en vue d’un déplacement vers un emplacement mémoire :

  1. Dans une fenêtre du débogueur, sélectionnez une adresse mémoire ou une variable de pointeur qui contient une adresse mémoire.

  2. Effectuez un glisser-déposer de l’adresse ou du pointeur dans la fenêtre Mémoire. Cette adresse apparaît ensuite dans le champ Adresse, puis la fenêtre Mémoire s’ajuste pour afficher cette adresse dans la partie supérieure.

Pour accéder à un emplacement mémoire en l’entrant dans le champ Adresse :

  • Tapez ou collez l’adresse ou l’expression dans le champ Adresse, puis appuyez sur Entrée, ou choisissez-la dans la liste déroulante du champ Adresse. La fenêtre Mémoire s’ajuste pour afficher cette adresse dans la partie supérieure.

Personnaliser la fenêtre Mémoire

Par défaut, le contenu de la mémoire s’affiche sous forme d’entiers d’un octet au format hexadécimal, et la largeur de la fenêtre détermine le nombre de colonnes affichées. Vous pouvez personnaliser la façon dont la fenêtre Mémoire affiche le contenu de la mémoire.

Pour changer le format du contenu mémoire :

  • Cliquez avec le bouton droit dans la fenêtre Mémoire, puis choisissez les formats souhaités dans le menu contextuel.

Pour modifier le nombre de colonnes affichées dans la fenêtre Mémoire :

  • Sélectionnez la flèche déroulante vers le bas en regard du champ Colonnes, puis sélectionnez le nombre de colonnes à afficher, ou sélectionnez Auto pour effectuer un ajustement automatique en fonction de la largeur de la fenêtre.

Si vous ne souhaitez pas que le contenu de la fenêtre Mémoire change pendant l’exécution de votre application, vous pouvez désactiver l’évaluation des expressions dynamiques.

Pour activer ou désactiver l’évaluation dynamique :

  • Cliquez avec le bouton droit dans la fenêtre Mémoire, puis sélectionnez Réévaluer automatiquement dans le menu contextuel.

    Notes

    L’évaluation des expressions dynamiques s’effectue via un bouton bascule. Dans la mesure où elle est activée par défaut, si vous sélectionnez Réévaluer automatiquement, vous la désactivez. Si vous sélectionnez Réévaluer automatiquement, elle est réactivée.

Vous pouvez masquer ou afficher la barre d’outils en haut de la fenêtre Mémoire. Vous n’avez pas accès au champ Adresse ou aux autres outils quand la barre d’outils est masquée.

Pour activer/désactiver l’affichage de la barre d’outils :

  • Cliquez avec le bouton droit dans la fenêtre Mémoire, puis sélectionnez Afficher la barre d’outils dans le menu contextuel. La barre d'outils disparaît ou apparaît, selon son état précédent.

Suivre un pointeur dans la mémoire (C/C++)

Dans les applications en code natif, vous pouvez utiliser les noms de registres en tant qu’expressions dynamiques. Par exemple, vous pouvez utiliser le pointeur de pile pour suivre la pile.

Pour suivre un pointeur dans la mémoire :

  1. Dans le champ Adresse de la fenêtre Mémoire, entrez une expression de pointeur qui se trouve dans l’étendue actuelle. Vous devrez la déréférencer en fonction du langage.

  2. Appuyez sur Entrée.

    Quand vous utilisez une commande de débogage telle que Exécuter pas à pas, l’adresse mémoire affichée dans le champ Adresse et en haut de la fenêtre Mémoire change automatiquement en fonction du pointeur.

Afficher les pointeurs de mémoire (.NET)

Si vous souhaitez afficher le contenu d’un objet .NET en fonction d’un pointeur de mémoire, tel qu’une adresse obtenue à partir d’un instantané de tas, vous pouvez le faire à l’aide de la notation {CLR}@Address. L’adresse doit être un pointeur vers la mémoire, par exemple 0x1D102A581B0. Entrez le pointeur de mémoire à l’aide de la notation {CLR}@Address dans le champ Adresse de la fenêtre Mémoire. Vous pouvez également utiliser la même notation pour ajouter un espion à l’aide de la fenêtre Espion.

Pour obtenir l’adresse du pointeur de mémoire à partir d’un instantané de tas, ouvrez le vidage du tas, choisissez Déboguer la mémoire managée, ce qui ouvre l’outil Utilisation de la mémoire. Cliquez avec le bouton droit sur l’objet qui vous intéresse, puis choisissez Afficher les instances.