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):
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 produjo 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 IDebugContainerField que representa el método que contiene la dirección especificada.Se consulta la interfaz IDebugMethodField. en la interfaz
IDebugContainerField
. Es esta interfaz que proporciona acceso a las variables locales del método.IDebugExpressionEvaluator::GetMethodProperty
crea una instancia de una clase (denominadaCFieldProperty
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 de 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 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.
Secciones relacionadas
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.