Mostrar 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.

La ejecución siempre tiene lugar dentro del contexto de un método, también conocido como método contenedor o método actual. Cuando la ejecución se detiene, Visual Studio llama al motor de depuración (DE) para obtener una lista de variables y argumentos locales, denominados colectivamente las variables locales del método. Visual Studio muestra estas variables locales y sus valores en la ventana Variables locales .

Para mostrar variables locales, el DE llama al método GetMethodProperty que pertenece a EE y le proporciona un contexto de evaluación, es decir, un proveedor de símbolos (SP), la dirección de ejecución actual y un objeto de enlazador. Para obtener más información, vea Contexto de evaluación. Si la llamada se realiza correctamente, el IDebugExpressionEvaluator::GetMethodProperty método devuelve un objeto IDebugProperty2 , que representa el método que contiene la dirección de ejecución actual.

El DE llama a EnumChildren para obtener un objeto IEnumDebugPropertyInfo2 , que se filtra para devolver solo variables locales y enumeradas para generar una lista de estructuras de DEBUG_PROPERTY_INFO . Cada estructura contiene el nombre, el tipo y el valor de un valor local. El tipo y el valor se almacenan como cadenas con formato, adecuadas para mostrar. Normalmente, el nombre, el tipo y el valor se muestran juntos en una línea de la ventana Variables locales .

Nota:

Las ventanas Inspección rápida y Inspección también muestran variables con el mismo formato de nombre, valor y tipo. Sin embargo, esos valores se obtienen llamando a GetPropertyInfo en lugar de IDebugProperty2::EnumChildren.

En esta sección

Implementación de ejemplo de variables locales Usa ejemplos para recorrer el proceso de implementación de variables locales.