Share via


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, vea Evaluadores de expresiones CLR y Ejemplo de evaluador de expresiones administradas.

A continuación se muestra información general sobre cómo obtiene Visual Studio las variables locales para 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 ha producido 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 objeto IDebugContainerField que representa el método que contiene la dirección especificada.

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

  5. IDebugExpressionEvaluator::GetMethodProperty crea una instancia de una clase (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, IDebugAddress y IDebugBinder.

  6. Cuando se inicializa el objeto CFieldProperty, se llama a GetInfo en el objeto IDebugMethodField para obtener una estructura 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 en cada variable local para obtener su nombre, valor y tipo. Esta información se muestra en la ventana Variables locales.

En esta sección

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

Enumeración de variables locales Se describe cómo el motor de depuración (DE) realiza una llamada 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.

Obtención de valores de variables locales Se describe cómo obtener el valor de la variable local, para lo que se necesitan los servicios de un objeto enlazador proporcionado por el contexto de evaluación.

Evaluación de variables locales Se explica cómo se evalúan las variables locales.

Contexto de evaluación Proporciona los argumentos que se pasan cuando el DE llama al evaluador de expresiones (EE).

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

Consulte también