Évaluer une expression de fenêtre espion

Important

Dans Visual Studio 2015, cette façon d’implémenter des évaluateurs d’expression est déconseillée. Pour plus d’informations sur l’implémentation d’évaluateurs d’expression CLR, consultez l’exemple d’évaluateur d’expression CLR et d’évaluateur d’expression managée.

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

Voici une vue d’ensemble de la façon dont une expression de liste de surveillance est évaluée :

  1. Visual Studio appelle getExpressionContext de DE pour obtenir un contexte d’expression qui peut être utilisé pour évaluer des expressions.

  2. Pour chaque expression de la liste de surveillance, Visual Studio appelle ParseText pour convertir le texte de l’expression en 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 place l’objet IDebugParsedExpression dans celui-ci. Cet objet IDebugExpression2 est ensuite retourné à 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 retourné à Visual Studio.

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

Analyser puis évaluer

Étant donné que l’analyse d’une expression complexe peut prendre beaucoup plus de temps que de l’évaluer, 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 façon, l’évaluation peut se produire plusieurs fois, mais l’expression doit être analysée une seule fois. L’expression analysée intermédiaire est retournée à partir de l’EE dans un objet IDebugParsedExpression qui est à son tour encapsulé et retourné à partir du DE en tant qu’objet IDebugExpression2 . L’objet IDebugExpression reporte toutes les évaluations à l’objet IDebugParsedExpression .

Remarque

Il n’est pas nécessaire qu’un EE adhère à ce processus en deux étapes même si Visual Studio suppose cela ; L’EE peut analyser et évaluer à la même étape lorsque EvaluateSync est appelé (il s’agit de l’exemple MyCEE, par exemple). Si votre langage peut former des expressions complexes, vous pouvez séparer l’étape d’analyse de l’étape d’évaluation. Cela peut augmenter les performances dans le débogueur Visual Studio lorsque de nombreuses expressions espions sont affichées.

Contenu de cette section

L’exemple d’implémentation de l’évaluation d’expression utilise l’exemple MyCEE pour parcourir le processus d’évaluation d’expression.

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