L’évaluation d’une Expression de la fenêtre EspionEvaluating a Watch Window Expression

Important

Dans Visual Studio 2015, ce moyen d’implémenter des évaluateurs d’expression est déconseillée.In Visual Studio 2015, this way of implementing expression evaluators is deprecated. Pour plus d’informations sur l’implémentation des évaluateurs d’expression CLR, consultez évaluateurs d’Expression CLR et exemple d’évaluateur d’Expression managé.For information about implementing CLR expression evaluators, please see CLR Expression Evaluators and Managed Expression Evaluator Sample.

Lorsque l’exécution s’arrête, Visual Studio appelle le moteur de débogage (DE) pour déterminer la valeur actuelle de chaque expression contenue dans sa liste de surveillance.When execution pauses, Visual Studio calls the debug engine (DE) to determine the current value of each expression in its watch list. Le D’évalue chaque expression à l’aide d’un évaluateur d’expression (EE) et Visual Studio affiche sa valeur dans le espion fenêtre.The DE evaluates each expression using an expression evaluator (EE), and Visual Studio displays its value in the Watch window.

Voici une vue d’ensemble du mode d’évaluation d’expression espionne liste :Here is an overview of how a watch list expression is evaluated:

  1. Visual Studio appelle de la DE GetExpressionContext pour obtenir le contexte d’une expression qui peut être utilisé pour évaluer des expressions.Visual Studio calls the DE's GetExpressionContext to get an expression context that can be used to evaluate expressions.

  2. Pour chaque expression dans la liste d’observation, Visual Studio appelle ParseText pour convertir le texte de l’expression dans une expression analysée.For each expression in the watch list, Visual Studio calls ParseText to convert the expression text into a parsed expression.

  3. IDebugExpressionContext2::ParseText appels analyser pour effectuer le travail réel de l’analyse du texte et générer un IDebugParsedExpression objet.IDebugExpressionContext2::ParseText calls Parse to do the actual work of parsing the text and produce an IDebugParsedExpression object.

  4. IDebugExpressionContext2::ParseText Crée un IDebugExpression2 objet et met le IDebugParsedExpression objet.IDebugExpressionContext2::ParseText creates an IDebugExpression2 object and puts the IDebugParsedExpression object into it. Ce que jeDebugExpression2 est ensuite retourné à Visual Studio.This IDebugExpression2 object is then returned to Visual Studio.

  5. Appels de Visual Studio EvaluateSync pour évaluer l’expression analysée.Visual Studio calls EvaluateSync to evaluate the parsed expression.

  6. IDebugExpression2::EvaluateSync passe l’appel à EvaluateSync pour effectuer l’évaluation et de produire un IDebugProperty2 objet qui est retourné à Visual Studio.IDebugExpression2::EvaluateSync passes the call to EvaluateSync to do the actual evaluation and produce an IDebugProperty2 object that is returned to Visual Studio.

  7. Appels de Visual Studio GetPropertyInfo pour obtenir la valeur de l’expression est alors affichée dans la liste de suivi.Visual Studio calls GetPropertyInfo to obtain the value of the expression that is then displayed in the watch list.

Analyser, puis évaluerParse Then Evaluate

Étant donné que l’analyse d’une expression complexe peut prendre beaucoup plus longue que l’évaluer, le processus de l’évaluation d’une expression est divisé en deux étapes : 1) analyse de l’expression et (2) d’évaluer l’expression analysée.Since parsing a complex expression can take much longer than evaluating it, the process of evaluating an expression is broken up into two steps: 1) parse the expression and 2) evaluate the parsed expression. De cette manière, l’évaluation peut se produire plusieurs fois, mais l’expression doit être analysée une seule fois.This way, evaluation can occur many times but the expression needs to be parsed only once. L’expression analysée intermédiaire est retournée à partir de la EE dans un IDebugParsedExpression objet encapsulé et retourné à partir de la DE comme à son tour une IDebugExpression2 objet.The intermediate parsed expression is returned from the EE in an IDebugParsedExpression object that is in turn encapsulated and returned from the DE as an IDebugExpression2 object. Le IDebugExpression diffère de l’objet tous d’évaluation à la IDebugParsedExpression objet.The IDebugExpression object defers all evaluation to the IDebugParsedExpression object.

Note

Il n’est pas nécessaire pour une EE adhérer à ce processus en deux étapes, bien que Visual Studio suppose que cela ; le EE peut analyser et évaluer dans la même étape lorsque EvaluateSync est appelé (c’est l’exemple MyCEE fonctionne, par exemple).It is not necessary for an EE to adhere to this two-step process even though Visual Studio assumes this; the EE can parse and evaluate in the same step when EvaluateSync is called (this is how the MyCEE sample works, for example). Si votre langage peut former des expressions complexes, vous voudrez séparer l’étape d’analyse de l’étape d’évaluation.If your language can form complex expressions, you may want to separate the parse step from the evaluation step. Cela peut augmenter les performances dans le débogueur Visual Studio lorsque plusieurs expressions espionnes sont affichés.This can increase performance in the Visual Studio debugger when many watch expressions are being shown.

Dans cette sectionIn This Section

Exemple d’implémentation de l’évaluation d’expressionSample Implementation of Expression Evaluation
Utilise l’exemple MyCEE pour parcourir le processus d’évaluation de l’expression.Uses the MyCEE sample to step through the process of expression evaluation.

Évaluation d’une expression espionneEvaluating a Watch Expression
Explique que se passe-t-il après une analyse de l’expression réussie.Explains what happens after a successful expression parse.

Contexte d’évaluationEvaluation Context
Fournit les arguments sont transmis lorsque le moteur de débogage (DE) appelle l’évaluateur d’expression (EE).Provides the arguments that are passed when the debug engine (DE) calls the expression evaluator (EE).

Voir aussiSee Also

L’écriture d’un évaluateur d’Expression CLRWriting a CLR Expression Evaluator