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 de su propiedad 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 (SP) del idioma común en tiempo de ejecución y a las interfaces de enlazador. Los objetos de SP y del enlazador, 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 se llama a IDebugExpressionContext2::ParseText
, el DE crea una instancia de EE asociado al lenguaje 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 su evaluación. Esta expresión analizada se representa mediante la interfaz IDebugParsedExpression. Normalmente, en este momento la expresión está analizada, pero no evaluada.
El DE crea un objeto que implementa la interfaz IDebugExpression2, coloca el objeto IDebugParsedExpression
en el objeto IDebugExpression2
y devuelve el objeto IDebugExpression2
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 interfaz IDebugProperty2
.
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 objeto IDebugProperty2
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 la memoria para que se use cuando se reanude la ejecución del programa.
Consulte Visualización de 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 al EE.
Interfaces del evaluador de expresiones clave describe las interfaces cruciales necesarias al escribir un EE, junto con el contexto de evaluación.