Partager via


Évaluer une expression de fenêtre Espion

Important

Dans Visual Studio 2015, cette façon de mettre en œuvre les évaluateurs d’expressions est obsolète. Pour des informations sur l’implémentation des évaluateurs d’expressions CLR, veuillez consulter la rubrique Évaluateurs d’expressions CLR et Exemple d’évaluateur d’expressions géré.

Lorsque l’exécution s’interrompt, Visual Studio appelle le moteur de débogage (DE) pour déterminer la valeur actuelle de chaque expression de sa liste espion. Le DE évalue chaque expression en utilisant un évaluateur d’expression (EE), et Visual Studio affiche sa valeur dans la fenêtre Espion.

Voici une vue d’ensemble de la manière dont une expression de liste espion est évaluée :

  1. Visual Studio appelle la fonction GetExpressionContext du DE pour obtenir un contexte d’expression qui peut être utilisé pour évaluer les expressions.

  2. Pour chaque expression de la liste espion, Visual Studio appelle ParseText pour convertir le texte de l’expression en une expression analysée.

  3. IDebugExpressionContext2::ParseText appelle Parse pour effectuer le travail réel d’analyse du texte et produire un objet IDebugParsedExpression.

  4. IDebugExpressionContext2::ParseText crée un objet IDebugExpression2 et y place l’objet IDebugParsedExpression. Cet objet IDebugExpression2 est ensuite renvoyé à Visual Studio.

  5. Visual Studio appelle EvaluateSync pour évaluer l’expression analysée.

  6. IDebugExpression2::EvaluateSync transmet l’appel à EvaluateSync pour effectuer l’évaluation réelle et produire un objet IDebugProperty2 qui est renvoyé à Visual Studio.

  7. Visual Studio appelle GetPropertyInfo pour obtenir la valeur de l’expression qui est ensuite affichée dans la liste espion.

Analyser puis évaluer

Étant donné que l’analyse d’une expression complexe peut prendre beaucoup plus de temps que son évaluation, le processus d’évaluation d’une expression est divisé en deux étapes : 1) analyser l’expression et 2) évaluer l’expression analysée. De cette manière, l’évaluation peut avoir lieu plusieurs fois, mais l’expression ne doit être analysée qu’une seule fois. L’expression intermédiaire analysée est renvoyée par l’EE dans un objet IDebugParsedExpression qui est à son tour encapsulé et renvoyé par le DE sous la forme d’un objet IDebugExpression2. L’objet IDebugExpression reporte toutes les évaluations sur l’objet IDebugParsedExpression.

Remarque

Il n’est pas nécessaire qu’un EE respecte ce processus en deux étapes, même si Visual Studio le suppose ; l’EE peut analyser et évaluer dans la même étape lorsque EvaluateSync est appelé (c’est ainsi que fonctionne l’exemple MyCEE, par exemple). Si votre langage peut former des expressions complexes, vous voudrez peut-être séparer l’étape d’analyse de l’étape d’évaluation. Le débogueur Visual Studio peut ainsi être plus performant lorsqu’un grand nombre d’expressions espion sont affichées.

Contenu de cette section

Exemple d’implémentation de l’évaluation d’expression utilise l’exemple MyCEE pour passer en revue le processus d’évaluation d’expression.

Évaluation d’une expression espion explique ce qui se passe après une analyse réussie de l’expression.