Expressions dans le débogueur Visual StudioExpressions in the Visual Studio debugger

Le débogueur Visual Studio inclut des évaluateurs d’expression qui fonctionnent lorsque vous entrez une expression dans la boîte de dialogue Espion express , la fenêtre Espion ou la fenêtre Exécution .The Visual Studio debugger includes expression evaluators that work when you enter an expression in the QuickWatch dialog box, Watch window, or Immediate window. Les évaluateurs d’expression travaillent également dans la fenêtre Points d’arrêt et à beaucoup d’autres emplacements du débogueur.The expression evaluators are also at work in the Breakpoints window and many other places in the debugger.

Les sections suivantes fournissent plus d’informations sur les expressions dans différents langages.The following sections give details about expressions in different languages.

Les expressions F# ne sont pas prises en charge.F# expressions are not supported

Les expressions F# ne sont pas reconnuesF# expressions are not recognized. Si vous déboguez du code F#, vous devez traduire vos expressions en syntaxe C# avant d’introduire les expressions dans une boîte de dialogue ou fenêtre de débogueur.If you are debugging F# code, you need to translate your expressions into C# syntax before entering the expressions into a debugger window or dialog box. Quand vous traduisez des expressions de F# en C#, gardez à l’esprit que C# utilise l’opérateur == pour tester l’égalité, tandis que F# utilise un seul =.When you translate expressions from F# to C#, be sure to remember that C# uses the == operator to test for equality, while F# uses the single =.

Expressions en C++C++ Expressions

Pour plus d’informations sur l’utilisation des opérateurs de contexte avec des expressions en C++, consultez Context Operator (C++).For information about using context operators with expressions in C++, see Context Operator (C++).

Expressions non prises en charge en C++Unsupported Expressions in C++

Constructeurs, destructeurs et conversionsConstructors, destructors, and conversions

Vous ne pouvez pas appeler un constructeur ni un destructeur pour un objet, explicitement ou implicitement.You cannot call a constructor or destructor for an object, either explicitly or implicitly. Par exemple, l’expression suivante appelle explicitement un constructeur et est à l’origine d’un message d’erreur :For example, the following expression explicitly calls a constructor and results in an error message:

my_date( 2, 3, 1985 )  

Vous ne pouvez pas appeler une fonction de conversion si la destination de la conversion est une classe.You cannot call a conversion function if the destination of the conversion is a class. Une telle conversion entraîne la construction d’un objet.Such a conversion involves the construction of an object. Par exemple, si myFraction est une instance de CFraction, qui définit l’opérateur de fonction de conversion FixedPoint, l’expression suivante génère une erreur :For example, if myFraction is an instance of CFraction, which defines the conversion function operator FixedPoint, the following expression results in an error:

(FixedPoint)myFraction  

Vous ne pouvez pas appeler l’opérateur new ou delete.You cannot call the new or delete operators. Par exemple, l’expression suivante n’est pas prise en charge :For example, the following expression is not supported:

new Date(2,3,1985)  

Macros de préprocesseurPreprocessor Macros

Les macros de préprocesseur ne sont pas prises en charge dans le débogueur.Preprocessor macros are not supported in the debugger. Par exemple, si une constante VALUE est déclarée en tant que #define VALUE 3, vous ne pouvez pas utiliser VALUE dans la fenêtre Espion .For instance, if a constant VALUE is declared as: #define VALUE 3, you cannot use VALUE in the Watch window. Pour éviter cette limitation, vous devez remplacer les éléments #definepar des énumérations et des fonctions chaque fois que possible.To avoid this limitation, you should replace #define's with enums and functions whenever possible.

Déclarations d’espaces de noms usingusing namespace declarations

Vous ne pouvez pas utiliser de déclarations using namespace .You cannot use using namespace declarations. Pour accéder à un nom de type ou une variable en dehors de l’espace de noms actuel, vous devez utiliser le nom qualifié complet.In order to access a type name or variable outside of the current namespace, you must use the fully-qualified name.

Espaces de noms anonymesAnonymous namespaces

Les espaces de noms anonymes ne sont pas pris en charge.Anonymous namespaces are not supported. Si vous avez le code suivant, vous ne pouvez pas ajouter test à la fenêtre Espion :If you have the following code, you cannot add test to the watch window:

namespace mars   
{   
    namespace  
    {  
        int test = 0;   
    }   
}   
int main()   
{   
    // Adding a watch on test does not work.   
    mars::test++;   
    return 0;   
}  

Utilisation de fonctions intrinsèques du débogueur pour maintenir l’étatUsing debugger intrinsic functions to maintain state

Les fonctions intrinsèques du débogueur vous permettent d’appeler certaines fonctions C/C++ dans les expressions sans modifier l’état de l’application.The debugger intrinsic functions give you a way to call certain C/C++ functions in expressions without changing the state of the application.

Fonctions intrinsèques du débogueur :Debugger intrinsic functions:

  • Garanties comme sécurisées : l’exécution d’une fonction intrinsèque du débogueur n’endommagera pas le processus qui est en cours de débogage.Are guaranteed to be safe: executing a debugger intrinsic function will not corrupt the process that is being debugged.

  • Autorisées dans toutes les expressions, même dans les scénarios où les effets secondaires et l’évaluation de fonction ne sont pas autorisés.Are allowed in all expressions , even in scenarios where side effects and function evaluation are not allowed.

  • Fonctionnent dans les scénarios où les appels de fonction normaux sont impossibles, tels que le débogage d’un minidump.Work in scenarios where the regular function calls are not possible, such as debugging a minidump.

    Les fonctions intrinsèques du débogueur peuvent également rendre l’évaluation des expressions plus pratique.Debugger intrinsic functions can also make evaluating expressions more convenient. Par exemple, il est beaucoup plus facile d’écrire strncmp(str, "asd") dans une condition de point d’arrêt que str[0] == 'a' && str[1] == 's' && str[2] == 'd'.For example, strncmp(str, "asd") is much easier to write in a breakpoint condition than str[0] == 'a' && str[1] == 's' && str[2] == 'd'. ))

DomaineArea Fonctions intrinsèquesIntrinsic functions
Longueur de la chaîneString length strlen, wcslen, strnlen, wcsnlenstrlen, wcslen, strnlen, wcsnlen
Comparaison de chaînesString comparison strcmp, wcscmp, stricmp, _stricmp, _strcmpi, wcsicmp, _wcscmpi, _wcsnicmp, strncmp, wcsncmp, strnicmp, wcsnicmpstrcmp, wcscmp, stricmp, _stricmp, _strcmpi, wcsicmp, _wcscmpi, _wcsnicmp, strncmp, wcsncmp, strnicmp, wcsnicmp
Recherche de chaîneString search strchr, wcschr, strstr, wcsstrstrchr, wcschr, strstr, wcsstr
Win32Win32 GetLastError(), TlsGetValue()GetLastError(), TlsGetValue()
Windows 8Windows 8 WindowsGetStringLen(), WindowsGetStringRawBuffer()WindowsGetStringLen(), WindowsGetStringRawBuffer()

Ces fonctions requièrent que le processus en cours de débogage s’exécute sur Windows 8.These functions require the process that is being debugged to be running on Windows 8. Le débogage des fichiers dump générés à partir d’un appareil Windows 8 requiert également que l’ordinateur Visual Studio exécute Windows 8.Debugging dump files generated from a Windows 8 device also requires that the Visual Studio computer be running Windows 8. Toutefois, si vous déboguez un appareil Windows 8 à distance, l’ordinateur Visual Studio peut exécuter Windows 7.However, if you are debugging a Windows 8 device remotely, the Visual Studio computer can be running Windows 7.
DiversMiscellaneous __log2__log2

Retourne le logarithme base 2 d’un entier spécifié, arrondi à l’entier inférieur le plus proche.Returns the log base 2 of a specified integer, rounded to the nearest lower integer.

Expressions non prises en charge en C++/CLIC++/CLI - Unsupported Expressions

  • Les casts qui utilisent des pointeurs, ou casts définis par l’utilisateur, ne sont pas pris en charge.Casts that involve pointers, or user-defined casts, are not supported.

  • La comparaison et l’assignation d’objet ne sont pas prises en charge.Object comparison and assignment are not supported.

  • Les opérateurs surchargés et les fonctions surchargées ne sont pas pris en charge.Overloaded operators and overloaded functions are not supported.

  • La conversion boxing et unboxing n’est pas prise en charge.Boxing and unboxing are not supported.

  • L’opérateurSizeof n’est pas pris en charge.Sizeof operator is not supported.

Expressions non prises en charge en C#C# - Unsupported Expressions

Objets dynamiquesDynamic Objects

Vous pouvez utiliser des variables dans les expressions du débogueur qui sont typées statiquement comme dynamiques.You can use variables in debugger expressions that are statically typed as dynamic. Quand des objets qui implémentent l’interface IDynamicMetaObjectProvider Interface sont évalués dans la fenêtre Espion, un nœud Affichage dynamique est ajouté.When objects that implement the IDynamicMetaObjectProvider Interface are evaluated in the Watch window, a Dynamic View node is added. Le nœud Affichage dynamique affiche les membres de l’objet, mais n’autorise pas la modification des valeurs des membres.The Dynamic View node shows object members but does not allow editing the values of the members.

Les fonctionnalités suivantes des objets dynamiques ne sont pas prises en charge :The following features of dynamic objects are not supported:

  • Opérateurs composés +=, -=, %=, /=et *=The compound operators +=, -=, %=, /=, and *=

  • De nombreux casts, notamment les casts numériques et casts d’argument de typeMany casts, including numeric casts and type-argument casts

  • Appels de méthode avec plus de deux argumentsMethod calls with more than two arguments

  • Accesseurs Get de propriété comportant plus de deux argumentsProperty getters with more than two arguments

  • Accesseurs Set de propriété comportant des argumentsProperty setters with arguments

  • Assignation à un indexeurAssigning to an indexer

  • Opérateurs booléens && et ||Boolean operators && and ||

Méthodes anonymesAnonymous Methods

La création de méthodes anonymes n’est pas prise en charge.Creation of new anonymous methods is not supported.

Expressions non prises en charge en Visual BasicVisual Basic - Unsupported Expressions

Objets dynamiquesDynamic Objects

Vous pouvez utiliser des variables dans les expressions du débogueur qui sont typées statiquement comme dynamiques.You can use variables in debugger expressions that are statically typed as dynamic. Quand des objets qui implémentent l’interface IDynamicMetaObjectProvider Interface sont évalués dans la fenêtre Espion, un nœud Affichage dynamique est ajouté.When objects that implement the IDynamicMetaObjectProvider Interface are evaluated in the Watch window, a Dynamic View node is added. Le nœud Affichage dynamique affiche les membres de l’objet, mais n’autorise pas la modification des valeurs des membres.The Dynamic View node shows object members but does not allow editing the values of the members.

Les fonctionnalités suivantes des objets dynamiques ne sont pas prises en charge :The following features of dynamic objects are not supported:

  • Opérateurs composés +=, -=, %=, /=et *=The compound operators +=, -=, %=, /=, and *=

  • De nombreux casts, notamment les casts numériques et casts d’argument de typeMany casts, including numeric casts and type-argument casts

  • Appels de méthode avec plus de deux argumentsMethod calls with more than two arguments

  • Accesseurs Get de propriété comportant plus de deux argumentsProperty getters with more than two arguments

  • Accesseurs Set de propriété comportant des argumentsProperty setters with arguments

  • Assignation à un indexeurAssigning to an indexer

  • Opérateurs booléens && et ||Boolean operators && and ||

Constantes localesLocal Constants

Les constantes locales ne sont pas prises en charge.Local constants are not supported.

Alias d’importationImport Aliases

Les alias d’importation ne sont pas pris en charge.Import aliases are not supported.

Déclarations de variableVariable Declarations

Vous ne pouvez pas déclarer de nouvelles variables explicites dans les fenêtres du débogueur.You cannot declare explicit new variables in debugger windows. Toutefois, vous pouvez assigner de nouvelles variables implicites dans la fenêtre Exécution .However, you can assign new implicit variables inside the Immediate window. La portée de ces variables implicites est celle de la session de débogage. Elles ne sont pas accessibles à l’extérieur du débogueur.These implicit variables are scoped to the debug session and are not accessible outside of the debugger. Par exemple, l’instruction o = 5 crée implicitement une variable o et lui assigne la valeur 5.For example, the statement o = 5 implicitly creates a new variable o and assign the value 5 to it. De telles variables implicites sont de type objet , sauf si le type peut être déduit par le débogueur.Such implicit variables are of type Object unless the type can be inferred by the debugger.

Mots clés non pris en chargeUnsupported Keywords

  • AddressOf

  • End

  • Error

  • Exit

  • Goto

  • On Error

  • Resume

  • Return

  • Select/Case

  • Stop

  • SyncLock

  • Throw

  • Try/Catch/Finally

  • With

  • Mots clés de niveau espace de noms ou module, comme End Sub ou Module.Namespace or module level keywords, such as End Sub or Module.

Voir aussiSee Also

Spécificateurs de format en C++ Format Specifiers in C++
Opérateur de contexte (C++) Context Operator (C++)
Spécificateurs de format en c# Format Specifiers in C#
Pseudo-variablesPseudovariables