Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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::GetDebugPropertyllama 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::GetMethodPropertyllama a GetContainerField con el objetoIDebugAddressproporcionado 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::GetMethodPropertycrea una instancia de una clase (denominadaCFieldPropertyen el ejemplo) que ejecuta la interfazIDebugProperty2para representar las variables locales del método. El objetoIDebugMethodFieldse coloca en este objetoCFieldPropertyjunto con los objetosIDebugSymbolProvider,IDebugAddressyIDebugBinder.Cuando se inicializa el objeto
CFieldProperty, se llama a getInfo en el objetoIDebugMethodFieldpara obtener una estructura de FIELD_INFO que contiene toda la información que se puede mostrar sobre el propio método.IDebugExpressionEvaluator::GetMethodPropertydevuelve el objetoCFieldPropertycomo un objetoIDebugProperty2.Visual Studio llama a EnumChildren en el objeto
IDebugProperty2devuelto 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
IDebugProperty2para 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.