Arquitectura del evaluador de expresionesExpression Evaluator Architecture

Importante

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 acerca de cómo implementar los evaluadores de expresión de CLR, vea evaluadores de expresión de CLR y Managed expresión evaluador Sample.For information about implementing CLR expression evaluators, please see CLR Expression Evaluators and Managed Expression Evaluator Sample.

Integrar un lenguaje propio en el paquete de depuración de Visual Studio significa implementar 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 de enlazador.Integrating a proprietary language into the Visual Studio debug package means implementing the required expression evaluator (EE) interfaces and calling the common language run-time symbol provider (SP) and binder interfaces. Los objetos de Service Pack y el enlazador, junto con la dirección de ejecución actual, son el contexto en 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 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ónParsing the Expression

Cuando se depura un programa, se evalúan las expresiones de una serie de motivos, pero siempre cuando se ha detenido el programa que se está depurando en un punto de interrupción (un punto de interrupción realizados por el usuario 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á representado por la IDebugStackFrame2 interfaz desde el motor de depuración (Alemania).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 a GetExpressionContext para obtener la IDebugExpressionContext2 interfaz.Visual Studio then calls GetExpressionContext to obtain 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 Alemania.Up until this point, all interfaces are implemented by the DE.

Cuando IDebugExpressionContext2::ParseText es llama, la DE crea instancias de lo EE asociado con el idioma del archivo de origen donde se produjo el punto de interrupción (el Alemania 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). El 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 está representada por la IDebugParsedExpression interfaz.This parsed expression is represented by the IDebugParsedExpression interface. Tenga en cuenta que la expresión se analiza normalmente y no se evalúa en este momento.Note that the expression is typically parsed and not evaluated at this point.

El Alemania crea un objeto que implementa el IDebugExpression2 interfaz, coloca el IDebugParsedExpression objeto en el IDebugExpression2 objeto y devuelve el IDebugExpression2 objeto 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ónEvaluating the Expression

Visual Studio llama a cualquiera EvaluateSync o EvaluateAsync para evaluar la expresión analizada.Visual Studio calls either EvaluateSync or EvaluateAsync to evaluate the parsed expression. Llamar 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 el 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::EvaluateSyncusa 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

Una vez que se alcanza un punto de interrupción en un programa en ejecución, el usuario elige para 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 la 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 usually 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 en 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 mostrar un 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 llama con el nuevo valor, que cambia el valor de la variable en la memoria, por lo que se utilizará 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.

Vea Mostrar variables locales para obtener más información acerca de este proceso de presentación de los valores de variables.See Displaying Locals for more details on this process of displaying the values of variables. Vea 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 clavesKey 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 de CLR Writing a CLR Expression Evaluator
Mostrar variables locales Displaying Locals
Cambio del valor de una variable localChanging the Value of a Local