Implementazione di esempio delle variabili locali
Importante
In Visual Studio 2015 questo modo di implementare gli analizzatori di espressioni è deprecato. Per informazioni sull'implementazione degli analizzatori di espressioni CLR, vedere l'esempio degli analizzatori di espressioni CLR e dell'analizzatore di espressioni gestite.
Di seguito è riportata una panoramica del modo in cui Visual Studio ottiene le variabili locali per un metodo dall'analizzatore di espressioni (edizione Enterprise):
Visual Studio chiama getDebugProperty (DE) del motore di debug per ottenere un oggetto IDebugProperty2 che rappresenta tutte le proprietà del frame dello stack, incluse le variabili locali.
IDebugStackFrame2::GetDebugProperty
chiama GetMethodProperty per ottenere un oggetto che descrive il metodo all'interno del quale si è verificato il punto di interruzione. DE fornisce un provider di simboli (IDebugSymbolProvider), un indirizzo (IDebugAddress) e un binder (IDebugBinder).IDebugExpressionEvaluator::GetMethodProperty
chiama GetContainerField con l'oggetto fornitoIDebugAddress
per ottenere un oggetto IDebugContainerField che rappresenta il metodo contenente l'indirizzo specificato.Viene
IDebugContainerField
eseguita una query sull'interfaccia IDebugMethodField . Si tratta di questa interfaccia che consente l'accesso alle variabili locali del metodo.IDebugExpressionEvaluator::GetMethodProperty
crea un'istanza di una classe (chiamataCFieldProperty
nell'esempio) che esegue l'interfacciaIDebugProperty2
per rappresentare le variabili locali del metodo. L'oggettoIDebugMethodField
viene inserito in questoCFieldProperty
oggetto insieme agliIDebugSymbolProvider
oggetti ,IDebugAddress
eIDebugBinder
.Quando l'oggetto
CFieldProperty
viene inizializzato, GetInfo viene chiamato sull'oggettoIDebugMethodField
per ottenere una struttura FIELD_INFO che contiene tutte le informazioni visualizzabili sul metodo stesso.IDebugExpressionEvaluator::GetMethodProperty
restituisce l'oggettoCFieldProperty
comeIDebugProperty2
oggetto .Visual Studio chiama EnumChildren sull'oggetto restituito
IDebugProperty2
con il filtroguidFilterLocalsPlusArgs
, che restituisce un oggetto IEnumDebugPropertyInfo2 contenente le variabili locali del metodo. Questa enumerazione viene compilata dalle chiamate a EnumLocals ed EnumArguments.Visual Studio chiama Next per ottenere una struttura DEBUG_PROPERTY_INFO per ogni locale. Questa struttura contiene un puntatore a un'interfaccia
IDebugProperty2
per un oggetto locale.Visual Studio chiama GetPropertyInfo per ogni locale per ottenere il nome, il valore e il tipo locali. Queste informazioni vengono visualizzate nella finestra Variabili locali .
Implementare GetMethodProperty Descrive un'implementazione di GetMethodProperty.
Enumerare variabili locali Descrive come il motore di debug effettua una chiamata per enumerare variabili o argomenti locali.
Ottiene le proprietà locali Descrive come de esegue una chiamata per ottenere il nome, il tipo e il valore di una o più variabili locali.
Ottenere i valori locali Illustra come ottenere il valore dell'oggetto locale, che richiede i servizi di un oggetto binder fornito dal contesto di valutazione.
Valuta variabili locali Spiega come vengono valutate le variabili locali.
Contesto di valutazione Fornisce gli argomenti passati quando denota l'analizzatore di espressioni (edizione Enterprise).
MyC edizione Enterprise esempio Illustra un approccio di implementazione alla creazione di un analizzatore di espressioni per il linguaggio MyC.