Arquitectura del evaluador de expresionesExpression evaluator architecture

Importante

En Visual Studio 2015, esta forma de implementar los evaluadores de expresión está en desuso.In Visual Studio 2015, this way of implementing expression evaluators is deprecated. Para obtener información sobre la implementación de evaluadores de expresión de CLR, vea evaluadores de expresiones CLR y ejemplo de evaluador de expresión administrado.For information about implementing CLR expression evaluators, see CLR expression evaluators and Managed expression evaluator sample.

Integrar un lenguaje propio en Visual Studio, paquete de depuración significa que debe configurar las interfaces de evaluador (EE) expresión requerido y llamar al proveedor de símbolos de tiempo de ejecución de lenguaje común (SP) y las interfaces del cuaderno.Integrating a proprietary language into the Visual Studio debug package means you must set up the required expression evaluator (EE) interfaces and call the common language run-time symbol provider (SP) and binder interfaces. Los objetos SP y el enlazador, junto con la dirección actual de ejecución, son el contexto en el que se evalúan las expresiones.The SP and binder objects, together with the current execution address, are the context in which expressions are evaluated. La información que estas interfaces se generan y utilizan representa los conceptos clave de la arquitectura de un EE.The information that these interfaces produce and consume represents the key concepts in the architecture of an EE.

Información generalOverview

Analizar la expresiónParse the Expression

Cuando se depura un programa, las expresiones se evalúan para una serie de motivos, pero siempre cuando se ha detenido el programa que se está depurando en un punto de interrupción (el usuario colocado un punto de interrupción o uno causado por una excepción).When you are debugging a program, expressions are evaluated for a number of reasons but always when the program being debugged has been stopped at a breakpoint (either a breakpoint placed by the user or one caused by an exception). Es en este momento cuando Visual Studio obtiene un marco de pila, tal como está representada por la IDebugStackFrame2 interfaz desde el motor de depuración (DE).It is at this moment when Visual Studio obtains a stack frame, as represented by the IDebugStackFrame2 interface, from the debug engine (DE). Visual Studio, a continuación, llama GetExpressionContext para obtener el IDebugExpressionContext2 interfaz.Visual Studio then calls GetExpressionContext to get the IDebugExpressionContext2 interface. Esta interfaz representa un contexto en el que se pueden evaluar expresiones; ParseText es el punto de entrada para el proceso de evaluación.This interface represents a context in which expressions can be evaluated; ParseText is the entry point to the evaluation process. Hasta este punto, todas las interfaces se implementan mediante la DE.Up until this point, all interfaces are implemented by the DE.

Cuando IDebugExpressionContext2::ParseText es llama, la DE crea una instancia de lo EE asociado con el idioma del archivo de origen donde se produjo el punto de interrupción (la DE también crea una instancia de la SH en este momento).When IDebugExpressionContext2::ParseText is called, the DE instantiates the EE associated with the language of the source file where the breakpoint occurred (the DE also instantiates the SH at this point). EE está representado por la IDebugExpressionEvaluator interfaz.The EE is represented by the IDebugExpressionEvaluator interface. A continuación, llama a la DE analizar para convertir la expresión (en formato de texto) en una expresión analizada, está listo para su evaluación.The DE then calls Parse to convert the expression (in text form) to a parsed expression, ready for evaluation. Esta expresión analizada se representa mediante el IDebugParsedExpression interfaz.This parsed expression is represented by the IDebugParsedExpression interface. La expresión es analizar normalmente y no se evalúan en este momento.The expression is typically parsed and not evaluated at this point.

La DE crea un objeto que implementa el IDebugExpression2 interfaz pone el IDebugParsedExpression objeto en el IDebugExpression2 objeto y devuelve el IDebugExpression2 objeto desde IDebugExpressionContext2::ParseText.The DE creates an object that implements the IDebugExpression2 interface, puts the IDebugParsedExpression object into the IDebugExpression2 object, and returns the IDebugExpression2 object from IDebugExpressionContext2::ParseText.

Evaluar la expresiónEvaluate the expression

Visual Studio llama a EvaluateSync o EvaluateAsync para evaluar la expresión analizada.Visual Studio calls either EvaluateSync or EvaluateAsync to evaluate the parsed expression. Llame ambos métodos EvaluateSync (IDebugExpression2::EvaluateSync llama al método inmediatamente, mientras IDebugExpression2::EvaluateAsync llama al método a través de un subproceso en segundo plano) para evaluar la expresión analizada y devolver un IDebugProperty2 interfaz que representa el valor y tipo de la expresión analizada.Both of these methods call EvaluateSync (IDebugExpression2::EvaluateSync calls the method immediately, while IDebugExpression2::EvaluateAsync calls the method through a background thread) to evaluate the parsed expression and return an IDebugProperty2 interface that represents the value and type of the parsed expression. IDebugParsedExpression::EvaluateSync usa el SH, la dirección y el enlazador proporcionado para convertir la expresión analizada en un valor real, representado por la IDebugProperty2 interfaz.IDebugParsedExpression::EvaluateSync uses the supplied SH, address, and binder to convert the parsed expression into an actual value, represented by the IDebugProperty2 interface.

Por ejemploFor example

Después de que se alcance un punto de interrupción en un programa en ejecución, el usuario decide ver una variable en el Inspección rápida cuadro de diálogo.After a breakpoint is hit in a running program, the user chooses to view a variable in the QuickWatch dialog box. Este cuadro de diálogo muestra el nombre de variable, su valor y su tipo.This dialog box shows the variable's name, its value, and its type. El usuario normalmente puede cambiar el valor.The user can typically change the value.

Cuando el Inspección rápida se muestra el cuadro de diálogo, el nombre de la variable que se está examinando se envía como texto para ParseText.When the QuickWatch dialog box is shown, the name of the variable being examined is sent as text to ParseText. Esto devuelve un IDebugExpression2 objeto que representa la expresión analizada, en este caso, la variable.This returns an IDebugExpression2 object representing the parsed expression, in this case, the variable. EvaluateSync , a continuación, se llama para producir una IDebugProperty2 objeto que representa el valor de la variable y tipo, así como su nombre.EvaluateSync is then called to produce an IDebugProperty2 object that represents the variable's value and type, as well as its name. Es la información que se muestra.It is this information that is displayed.

Si el usuario cambia el valor de la variable, SetValueAsString se denomina con el nuevo valor, que cambia el valor de la variable en la memoria, por lo que se usará cuando el programa reanuda la ejecución.If the user changes the variable's value, SetValueAsString is called with the new value, which changes the value of the variable in memory so it will be used when the program resumes running.

Consulte muestra las variables locales para obtener más detalles sobre este proceso de mostrar los valores de variables.See Displaying locals for more details on this process of displaying the values of variables. Consulte cambiar el valor de una variable local para obtener más detalles sobre cómo se cambia el valor de una variable.See Changing the value of a local for more details on how a variable's value is changed.

En esta secciónIn this section

Contexto de evaluaciónEvaluation context
Proporciona los argumentos que se pasan cuando llama a la DE lo EE.Provides the arguments that are passed when the DE calls the EE.

Interfaces de evaluador de expresión de claveKey expression evaluator interfaces
Describe las interfaces fundamentales necesarios al escribir un EE, junto con el contexto de evaluación.Describes the crucial interfaces needed when writing an EE, along with the evaluation context.

Vea tambiénSee also

Escribir un evaluador de expresiones CLR Writing a CLR expression evaluator
Visualización de variables locales Displaying locals
Cambiar el valor de una variable localChanging the value of a local