Partage via


Exemple d’implémentation de variables locales

Important

Dans Visual Studio 2015, cette façon d’implémenter des évaluateurs d’expression est déconseillée. Pour plus d’informations sur l’implémentation d’évaluateurs d’expressions CLR, consultez évaluateurs d’expression CLR et exemple d’évaluateur d’expression managée.

Voici une vue d’ensemble de la façon dont Visual Studio obtient les variables locales d’une méthode à partir de l’évaluateur d’expression (EE) :

  1. Visual Studio appelle le moteur de débogage (DE) GetDebugProperty pour obtenir un objet IDebugProperty2 qui représente toutes les propriétés de la pile d'appels, y compris les variables locales.

  2. IDebugStackFrame2::GetDebugProperty appelle GetMethodProperty pour obtenir un objet qui décrit la méthode dans laquelle le point d’arrêt s’est produit. Le DE fournit un fournisseur de symboles (IDebugSymbolProvider), une adresse (IDebugAddress) et un binder (IDebugBinder).

  3. IDebugExpressionEvaluator::GetMethodProperty appelle GetContainerField avec l’objet IDebugAddress fourni pour obtenir un IDebugContainerField qui représente la méthode contenant l’adresse spécifiée.

  4. L’interface IDebugContainerField est interrogée pour l’interface IDebugMethodField. Cette interface donne accès aux variables locales de la méthode.

  5. IDebugExpressionEvaluator::GetMethodProperty instancie une classe (appelée CFieldProperty dans l’exemple) qui exécute l’interface IDebugProperty2 pour représenter les locaux de la méthode. L’objet IDebugMethodField est placé dans cet objet CFieldProperty ainsi que les objets IDebugSymbolProvider, IDebugAddresset IDebugBinder.

  6. Lorsque l’objet CFieldProperty est initialisé, GetInfo est appelé sur l’objet IDebugMethodField pour obtenir une structure FIELD_INFO qui contient toutes les informations affichables sur la méthode elle-même.

  7. IDebugExpressionEvaluator::GetMethodProperty retourne l’objet CFieldProperty en tant qu’objet IDebugProperty2.

  8. Visual Studio appelle EnumChildren sur l’objet IDebugProperty2 retourné avec le filtre guidFilterLocalsPlusArgs, qui retourne un objet IEnumDebugPropertyInfo2 contenant les variables locales de la méthode. Cette énumération est renseignée par des appels à EnumLocals et EnumArguments.

  9. Visual Studio appelle Next pour obtenir une structure DEBUG_PROPERTY_INFO pour chaque variable locale. Cette structure contient un pointeur vers une interface IDebugProperty2 pour un local.

  10. Visual Studio appelle GetPropertyInfo pour chaque local afin d’obtenir le nom, la valeur et le type du local. Ces informations s’affichent dans la fenêtre Locals.

Dans cette section

Mettre en œuvre GetMethodProperty décrit une implémentation de GetMethodProperty.

Énumérer les variables locales décrit comment le moteur de débogage (DE) effectue un appel pour énumérer des variables ou des arguments locaux.

Obtenir des propriétés locales décrit comment le DE appelle pour obtenir le nom, le type et la valeur d'une ou plusieurs variables locales.

Obtenir des valeurs locales décrit l’obtention de la valeur locale, ce qui nécessite les services d’un objet binder donné par le contexte d’évaluation.

Évaluer les locaux explique comment les variables locales sont évaluées.

Le contexte d’évaluation fournit les arguments qui sont passés lorsque le DE appelle l’évaluateur d’expressions (EE).

exemple MyCEE illustre une approche d’implémentation pour créer un évaluateur d’expression pour le langage MyC.

Voir aussi