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):
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.
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).IDebugExpressionEvaluator::GetMethodProperty
llama a GetContainerField con el objetoIDebugAddress
proporcionado para obtener un objeto IDebugContainerField que representa el método que contiene la dirección especificada.Se consulta la interfaz IDebugMethodField. en la interfaz
IDebugContainerField
. Esta interfaz es la que proporciona acceso a las variables locales del método.IDebugExpressionEvaluator::GetMethodProperty
crea una instancia de una clase (CFieldProperty
en el ejemplo) que ejecuta la interfazIDebugProperty2
para representar las variables locales del método. El objetoIDebugMethodField
se coloca en este objetoCFieldProperty
junto con los objetosIDebugSymbolProvider
,IDebugAddress
yIDebugBinder
.Cuando se inicializa el objeto
CFieldProperty
, se llama a GetInfo en el objetoIDebugMethodField
para obtener una estructura FIELD_INFO que contiene toda la información que se puede mostrar sobre el propio método.IDebugExpressionEvaluator::GetMethodProperty
devuelve el objetoCFieldProperty
como un objetoIDebugProperty2
.Visual Studio llama a EnumChildren en el objeto
IDebugProperty2
devuelto con el filtroguidFilterLocalsPlusArgs
, que devuelve un objeto IEnumDebugPropertyInfo2 que contiene las variables locales del método. Esta enumeración se rellena mediante llamadas a EnumLocals y EnumArguments.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.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.
Secciones relacionadas
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.