Partager via


Évaluation des expressions

Le débogueur comprend deux formes d’expressions différentes : les expressions MASM et les expressions C++.

Les expressions Microsoft Macro Assembleur (MASM) sont utilisées dans les exemples de cette documentation d’aide, sauf indication contraire. Dans les expressions MASM, tous les symboles sont traités comme des adresses.

Les expressions C++ sont identiques à celles utilisées dans le code C++ réel. Dans ces expressions, les symboles sont compris comme les types de données appropriés.

Quand chaque syntaxe est utilisée

Vous pouvez sélectionner l’évaluateur d’expression par défaut de l’une des manières suivantes :

Si vous n’utilisez pas l’une des méthodes précédentes, le débogueur utilise l’évaluateur d’expression MASM.

Si vous souhaitez évaluer une expression sans modifier l’état du débogueur, vous pouvez utiliser ? (Évaluer l’expression) Commande.

Toutes les commandes et les fenêtres d’informations de débogage interprètent leurs arguments par le biais de l’évaluateur d’expression par défaut, à l’exception des exceptions suivantes :

  • Le ?? (Évaluer l’expression C++) la commande utilise toujours l’évaluateur d’expression C++.

  • La fenêtre Watch utilise toujours l’évaluateur d’expression C++.

  • La fenêtre Locals utilise toujours l’évaluateur d’expression C++.

  • Certaines commandes d’extension utilisent toujours l’évaluateur d’expression MASM (et d’autres commandes d’extension acceptent uniquement des arguments numériques au lieu des expressions complètes).

  • Si une partie d’une expression est placée entre parenthèses et que vous en insérez deux au niveau des signes (@@) avant l’expression, l’expression est évaluée par l’évaluateur d’expression qui ne serait généralement pas utilisé dans ce cas.

Les deux signaux (@@) vous permettent d’utiliser deux évaluateurs différents pour différents paramètres d’une seule commande. Il vous permet également d’évaluer différents éléments d’une expression longue par différentes méthodes. Vous pouvez imbriquer les deux à des panneaux. Chaque apparence des deux au niveau des signes bascule vers l’autre évaluateur d’expression.

Avertissement La syntaxe d’expression C++ est utile pour manipuler des structures et des variables, mais elle n’est pas bien adaptée en tant qu’analyseur pour les paramètres des commandes du débogueur. Lorsque vous utilisez des commandes de débogueur à des fins générales ou que vous utilisez des extensions de débogueur, vous devez définir la syntaxe d’expression MASM comme évaluateur d’expression par défaut. Si vous devez disposer d’un paramètre spécifique, utilisez la syntaxe d’expression C++, utilisez la syntaxe des deux au signe (@@).

Pour plus d’informations sur les deux types d’expressions différents, consultez Syntaxe des expressions numériques.

Nombres dans les expressions

Les nombres dans les expressions MASM sont interprétés en fonction du radix actuel. La commande n (Set Number Base) peut être utilisée pour définir le radix par défaut sur 16, 10 ou 8. Tous les nombres non préfixés seront interprétés dans cette base. Le radix par défaut peut être remplacé en spécifiant le préfixe 0x (hexadécimal), le préfixe 0n (décimal), le préfixe 0t (octal) ou le préfixe 0y (binaire).

Les nombres dans les expressions C++ sont interprétés comme des nombres décimaux, sauf si vous spécifiez différemment. Pour spécifier un entier hexadécimal, ajoutez 0x avant le nombre. Pour spécifier un entier octal, ajoutez 0 (zéro) avant le nombre. (Toutefois, dans la sortie du débogueur, le préfixe décimal 0n est parfois utilisé.)

Si vous souhaitez afficher un nombre dans plusieurs bases en même temps, utilisez la commande .formats (Afficher les formats numériques).

Symboles dans expressions

Les deux types d’expressions interprètent les symboles différemment :

  • Dans les expressions MASM, chaque symbole est interprété comme une adresse. Selon ce à quoi le symbole fait référence, cette adresse est l’adresse d’une variable globale, d’une variable locale, d’une fonction, d’un segment, d’un module ou de toute autre étiquette reconnue.

  • Dans les expressions C++, chaque symbole est interprété en fonction de son type. Selon ce à quoi le symbole fait référence, il peut être interprété comme un entier, une structure de données, un pointeur de fonction ou tout autre type de données. Un symbole qui ne correspond pas à un type de données C++ (tel qu’un nom de module non modifié) crée une erreur de syntaxe.

Si un symbole peut être ambigu, faites-le précéder du nom du module et d’un point d’exclamation ( ! ). Si le nom du symbole peut être interprété comme un nombre hexadécimal, faites-le précéder du nom du module et d’un point d’exclamation ( ! ) ou seulement d’un point d’exclamation. Pour spécifier qu’un symbole est destiné à être local, omettez le nom du module et incluez un signe dollar et un point d’exclamation ( $ ! ) avant le nom du symbole. Pour plus d’informations sur l’interprétation des symboles, consultez Syntaxe des symboles et Correspondance des symboles.

Opérateurs dans expressions

Chaque type d’expression utilise une collection différente d’opérateurs.

Pour plus d’informations sur les opérateurs que vous pouvez utiliser dans les expressions MASM et leurs règles de priorité, consultez Numéros et opérateurs MASM.

Pour plus d’informations sur les opérateurs que vous pouvez utiliser dans les expressions C++ et leurs règles de priorité, consultez Numéros et opérateurs C++.

N’oubliez pas que les opérations MASM sont toujours basées sur des octets et que les opérations C++ suivent des règles de type C++ (y compris la mise à l’échelle arithmétique du pointeur).

Pour obtenir des exemples des différentes syntaxes, consultez Exemples d’expressions mixtes.