Compartir vía


Implementación de ejemplo de variables locales

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, consulte evaluadores de expresiones CLR y ejemplo de evaluador de expresiones administradas.

A continuación se muestra información general sobre cómo Visual Studio obtiene las variables locales de un método del evaluador de expresiones (EE):

  1. Visual Studio llama a GetDebugProperty del motor de depuración (DE) para obtener un objeto IDebugProperty2 que representa todas las propiedades del marco de pila, incluidas las variables locales.

  2. IDebugStackFrame2::GetDebugProperty llama a GetMethodProperty para obtener un objeto que describe el método en el que se produjo el punto de interrupción. El DE proporciona un proveedor de símbolos (IDebugSymbolProvider), una dirección (IDebugAddress) y un enlazador (IDebugBinder).

  3. IDebugExpressionEvaluator::GetMethodProperty llama a GetContainerField con el objeto IDebugAddress proporcionado para obtener un IDebugContainerField que representa el método que contiene la dirección especificada.

  4. Se consulta la interfaz IDebugMethodField. en la interfaz IDebugContainerField. Es esta interfaz que proporciona acceso a las variables locales del método.

  5. IDebugExpressionEvaluator::GetMethodProperty crea una instancia de una clase (denominada CFieldProperty en el ejemplo) que ejecuta la interfaz IDebugProperty2 para representar las variables locales del método. El objeto IDebugMethodField se coloca en este objeto CFieldProperty junto con los objetos IDebugSymbolProvider, IDebugAddressy IDebugBinder.

  6. Cuando se inicializa el objeto CFieldProperty, se llama a getInfo en el objeto IDebugMethodField para obtener una estructura de FIELD_INFO que contiene toda la información que se puede mostrar sobre el propio método.

  7. IDebugExpressionEvaluator::GetMethodProperty devuelve el objeto CFieldProperty como un objeto IDebugProperty2.

  8. Visual Studio llama a EnumChildren en el objeto IDebugProperty2 devuelto con el filtro guidFilterLocalsPlusArgs, que devuelve un objeto IEnumDebugPropertyInfo2 que contiene las variables locales del método. Esta enumeración se rellena mediante llamadas a enumLocals y EnumArguments.

  9. Visual Studio llama a Next para obtener una estructura DEBUG_PROPERTY_INFO para cada variable local. Esta estructura contiene un puntero a una interfaz IDebugProperty2 para una variable local.

  10. Visual Studio llama a GetPropertyInfo para cada local para obtener el nombre, el valor y el tipo del local. Esta información se muestra en la ventana Locales.

En esta sección

Implementación de GetMethodProperty Se describe una implementación de GetMethodProperty.

Enumerar variables locales describe cómo realiza la llamada al motor de depuración (DE) para enumerar variables locales o argumentos.

Obtención de propiedades de variables locales Se describe cómo el DE realiza una llamada para obtener el nombre, el tipo y el valor de una variable local o varias.

Obtener valores locales explica cómo obtener el valor del local, que requiere los servicios de un objeto vinculador proporcionado por el contexto de evaluación.

Evaluar variables locales explica cómo se evalúan las variables locales.

El Contexto de Evaluación proporciona los argumentos que se pasan cuando el DE llama al Evaluador de Expresiones (EE).

ejemplo de MyCEE muestra un enfoque de implementación para crear un evaluador de expresiones para el lenguaje MyC.

Consulte también