Partager via


Accès aux variables globales

Les noms des variables globales sont stockés dans les fichiers de symboles qui sont créés lors de la compilation d’une application. Le débogueur interprète le nom d’une variable globale comme une adresse virtuelle. Toute commande qui accepte une adresse en tant que paramètre accepte également le nom d’une variable. Par conséquent, vous pouvez utiliser toutes les commandes décrites dans Accès à la mémoire par adresse virtuelle pour lire ou écrire des variables globales.

En outre, vous pouvez utiliser le ? (Évaluer l’expression) commande pour afficher l’adresse associée à n’importe quel symbole.

WinDbg fournit des éléments d’interface utilisateur que vous pouvez utiliser (en plus des commandes) pour afficher et modifier des variables globales. Consultez Affichage et modification des variables globales dans WinDbg (classique).

Considérez l'exemple suivant. Supposons que vous souhaitiez examiner la MyCounter variable globale, qui est un entier de 32 bits. Supposons également que le radix par défaut est 10.

Vous pouvez obtenir l’adresse de cette variable, puis l’afficher comme suit.

0:000> ? MyCounter 
Evaluate expression: 1244892 = 0012fedc
0:000> dd 0x0012fedc L1 
0012fedc  00000052

La première sortie de commande vous indique que l’adresse de MyCounter est 0x0012FEDC. Vous pouvez ensuite utiliser la commande d* (Afficher la mémoire) pour afficher un mot double à cette adresse. (Vous pouvez également utiliser 1244892, qui est la version décimale de cette adresse. Toutefois, la plupart des programmeurs C préfèrent utiliser 0x0012FEDC.) La deuxième commande vous indique que la valeur de MyCounter est 0x52 (décimale 82).

Vous pouvez également effectuer ces étapes dans la commande suivante.

0:000> dd MyCounter L1 
0012fedc  00000052

Pour remplacer la valeur de MyCounter par décimale 83, utilisez la commande suivante.

0:000> ed MyCounter 83 

Cet exemple utilise une entrée décimale, car ce format semble plus naturel pour un entier. Toutefois, la sortie de la commande d\* est toujours au format hexadécimal.

0:000> dd MyCounter L1 0012fedc  00000053