Condividi tramite


Architettura dell'analizzatore di espressioni

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.

L'integrazione di un linguaggio proprietario nel pacchetto di debug di Visual Studio significa che è necessario configurare le interfacce dell'analizzatore di espressioni (edizione Enterprise) necessarie e chiamare il provider di simboli di runtime del linguaggio comune (SP) e le interfacce del gestore di associazione. Gli oggetti SP e binder, insieme all'indirizzo di esecuzione corrente, sono il contesto in cui vengono valutate le espressioni. Le informazioni che queste interfacce producono e utilizzano rappresentano i concetti chiave nell'architettura di un edizione Enterprise.

Analizzare l'espressione

Quando si esegue il debug di un programma, le espressioni vengono valutate per diversi motivi, ma sempre quando il programma sottoposto a debug è stato arrestato in un punto di interruzione (un punto di interruzione posizionato dall'utente o uno causato da un'eccezione). È in questo momento in cui Visual Studio ottiene uno stack frame, rappresentato dall'interfaccia IDebugStackFrame2 , dal motore di debug (DE). Visual Studio chiama quindi GetExpressionContext per ottenere l'interfaccia IDebugExpressionContext2 . Questa interfaccia rappresenta un contesto in cui è possibile valutare le espressioni; ParseText è il punto di ingresso del processo di valutazione. Fino a questo punto, tutte le interfacce vengono implementate dalla de.

Quando IDebugExpressionContext2::ParseText viene chiamato , de crea un'istanza del edizione Enterprise associato alla lingua del file di origine in cui si è verificato il punto di interruzione (il de crea anche un'istanza di SH a questo punto). Il edizione Enterprise è rappresentato dall'interfaccia IDebugExpressionEvaluator. De chiama quindi Parse per convertire l'espressione (in formato testo) in un'espressione analizzata, pronta per la valutazione. Questa espressione analizzata è rappresentata dall'interfaccia IDebugParsedExpression . L'espressione viene in genere analizzata e non valutata a questo punto.

DE crea un oggetto che implementa l'interfaccia IDebugExpression2 , inserisce l'oggetto IDebugParsedExpression nell'oggetto IDebugExpression2 e restituisce l'oggetto IDebugExpression2 da IDebugExpressionContext2::ParseText.

Valutare l'espressione

Visual Studio chiama EvaluateSync o EvaluateAsync per valutare l'espressione analizzata. Entrambi questi metodi chiamano EvaluateSync (IDebugExpression2::EvaluateSync chiama immediatamente il metodo , mentre IDebugExpression2::EvaluateAsync chiama il metodo tramite un thread in background) per valutare l'espressione analizzata e restituire un'interfaccia IDebugProperty2 che rappresenta il valore e il tipo dell'espressione analizzata. IDebugParsedExpression::EvaluateSync usa il gestore di associazione, l'indirizzo e il gestore di associazione forniti per convertire l'espressione analizzata in un valore effettivo, rappresentato dall'interfaccia IDebugProperty2 .

Ad esempio:

Dopo che un punto di interruzione viene raggiunto in un programma in esecuzione, l'utente sceglie di visualizzare una variabile nella finestra di dialogo Controllo immediato. Questa finestra di dialogo mostra il nome della variabile, il relativo valore e il relativo tipo. L'utente può in genere modificare il valore.

Quando viene visualizzata la finestra di dialogo Controllo immediato, il nome della variabile esaminata viene inviato come testo a ParseText. Viene restituito un oggetto IDebugExpression2 che rappresenta l'espressione analizzata, in questo caso la variabile . Viene quindi chiamato EvaluateSync per produrre un IDebugProperty2 oggetto che rappresenta il valore e il tipo della variabile, nonché il relativo nome. Si tratta di queste informazioni visualizzate.

Se l'utente modifica il valore della variabile, SetValueAsString viene chiamato con il nuovo valore, che modifica il valore della variabile in memoria in modo che venga usato quando il programma riprende l'esecuzione.

Per altri dettagli su questo processo di visualizzazione dei valori delle variabili, vedere Visualizzazione delle variabili locali . Per altre informazioni sul modo in cui viene modificato il valore di una variabile, vedere Modifica del valore di una variabile .

In questa sezione

Il contesto di valutazione fornisce gli argomenti passati quando denota la edizione Enterprise.

Le interfacce dell'analizzatore di espressioni chiave descrivono le interfacce cruciali necessarie durante la scrittura di un edizione Enterprise, insieme al contesto di valutazione.