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) :
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.
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).IDebugExpressionEvaluator::GetMethodProperty
appelle GetContainerField avec l’objet fourniIDebugAddress
pour obtenir un IDebugContainerField qui représente la méthode contenant l’adresse spécifiée.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.IDebugExpressionEvaluator::GetMethodProperty
instancie une classe (appeléeCFieldProperty
dans l’exemple) qui exécute l’interfaceIDebugProperty2
pour représenter les locaux de la méthode. L’objetIDebugMethodField
est placé dans cetCFieldProperty
objet avec lesIDebugSymbolProvider
objets ,IDebugAddress
etIDebugBinder
les objets.Lorsque l’objet
CFieldProperty
est initialisé, GetInfo est appelé sur l’objetIDebugMethodField
pour obtenir une structure FIELD_INFO qui contient toutes les informations affichables sur la méthode elle-même.IDebugExpressionEvaluator::GetMethodProperty
retourne l’objetCFieldProperty
en tant qu’objetIDebugProperty2
.Visual Studio appelle EnumChildren sur l’objet retourné
IDebugProperty2
avec le filtreguidFilterLocalsPlusArgs
, qui retourne un objet IEnumDebugPropertyInfo2 contenant les locaux de la méthode. Cette énumération est renseignée par des appels à EnumLocals et EnumArguments.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.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.
Sections connexes
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.