Share via


Exemple d’implémentation des locaux

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’expression CLR, consultez l’exemple d’évaluateur d’expression CLR et 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 du frame de pile, y compris les locaux.

  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 classeur (IDebugBinder).

  3. IDebugExpressionEvaluator::GetMethodProperty appelle GetContainerField avec l’objet fourni IDebugAddress 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 . Il s’agit de cette interface qui donne accès aux locaux 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 CFieldProperty objet avec les IDebugSymbolProviderobjets , IDebugAddresset IDebugBinder les objets.

  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 retourné IDebugProperty2 avec le filtre guidFilterLocalsPlusArgs, qui retourne un objet IEnumDebugPropertyInfo2 contenant les locaux 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 local. Cette structure contient un pointeur vers une IDebugProperty2 interface pour un local.

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

Contenu de cette section

Implémenter 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 les propriétés locales Décrit comment le DE effectue un appel pour obtenir le nom, le type et la valeur d’une ou plusieurs variables locales.

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

Évaluer les variables locales Explique comment les variables locales sont évaluées.

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

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

Voir aussi