Share via


Arquitectura del evaluador de expresiones

Importante

En Visual Studio 2015, esta forma de implementar evaluadores de expresiones está en desuso. Para obtener información sobre cómo implementar evaluadores de expresiones CLR, vea Evaluadores de expresiones CLR y Ejemplo de evaluador de expresiones administradas.

Integrar un lenguaje propietario en el paquete de depuración de Visual Studio significa que debe configurar las interfaces del evaluador de expresiones (EE) necesarias y llamar al proveedor de símbolos en tiempo de ejecución (SP) de Common Language y las interfaces de enlazador. Los objetos SP y binder, junto con la dirección de ejecución actual, son el contexto en el que se evalúan las expresiones. La información que producen y consumen estas interfaces representa los conceptos clave en la arquitectura de un EE.

Análisis de la expresión

Al depurar un programa, las expresiones se evalúan por varias razones, pero siempre cuando el programa que se está depurando se ha detenido en un punto de interrupción (ya sea un punto de interrupción colocado por el usuario o uno causado por una excepción). Es en este momento cuando Visual Studio obtiene un marco de pila, tal como se representa mediante la interfaz IDebugStackFrame2 , desde el motor de depuración (DE). A continuación, Visual Studio llama a GetExpressionContext para obtener la interfaz IDebugExpressionContext2 . Esta interfaz representa un contexto en el que se pueden evaluar expresiones; ParseText es el punto de entrada del proceso de evaluación. Hasta este momento, el DE implementa todas las interfaces.

Cuando IDebugExpressionContext2::ParseText se llama a , el DE crea una instancia de EE asociado al idioma del archivo de origen en el que se produjo el punto de interrupción (el DE también crea una instancia del SH en este momento). El EE se representa mediante la interfaz IDebugExpressionEvaluator . A continuación, EL DE llama a Parse para convertir la expresión (en formato de texto) en una expresión analizada, lista para la evaluación. Esta expresión analizada se representa mediante la interfaz IDebugParsedExpression . Normalmente, la expresión se analiza y no se evalúa en este momento.

El DE crea un objeto que implementa la interfaz IDebugExpression2 , coloca el IDebugParsedExpression objeto en el IDebugExpression2 objeto y devuelve el IDebugExpression2 objeto de IDebugExpressionContext2::ParseText.

Evaluación de la expresión

Visual Studio llama a EvaluateSync o EvaluateAsync para evaluar la expresión analizada. Ambos métodos llaman a 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 una interfaz IDebugProperty2 que representa el valor y el tipo de la expresión analizada. IDebugParsedExpression::EvaluateSync usa el SH, la dirección y el enlazador proporcionados para convertir la expresión analizada en un valor real, representado por la IDebugProperty2 interfaz .

Por ejemplo

Una vez que se alcanza un punto de interrupción en un programa en ejecución, el usuario elige ver una variable en el cuadro de diálogo Inspección rápida. Este cuadro de diálogo muestra el nombre de la variable, su valor y su tipo. Normalmente, el usuario puede cambiar el valor.

Cuando se muestra el cuadro de diálogo Inspección rápida, el nombre de la variable que se está examinando se envía como texto a ParseText. Esto devuelve un objeto IDebugExpression2 que representa la expresión analizada, en este caso, la variable . A continuación, se llama a EvaluateSync para generar un IDebugProperty2 objeto que representa el valor y el tipo de la variable, así como su nombre. Se trata de esta información que se muestra.

Si el usuario cambia el valor de la variable, se llama a SetValueAsString con el nuevo valor, que cambia el valor de la variable en memoria para que se use cuando el programa se reanude la ejecución.

Consulte Visualización de variables locales para obtener más información sobre este proceso de visualización de los valores de las variables. Consulte Cambio del valor de un local para obtener más información sobre cómo se cambia el valor de una variable.

En esta sección

Contexto de evaluación Proporciona los argumentos que se pasan cuando el DE llama a EE.

Interfaces del evaluador de expresiones clave Describe las interfaces cruciales necesarias al escribir una EE, junto con el contexto de evaluación.