Expression evaluator (Ausdrucksauswertung)
Ausdrucksauswerter (EE) untersuchen die Syntax einer Sprache, um Variablen und Ausdrücke zur Laufzeit zu analysieren und auszuwerten, so dass sie vom Benutzer angezeigt werden können, wenn sich die IDE im Pause-Modus befindet.
Ausdrucksauswerter verwenden
Ausdrücke werden mit der Methode ParseText wie folgt erstellt:
Die Debug-Engine (DE) implementiert die Schnittstelle IDebugExpressionContext2.
Das Debuggen eines Pakets erhält ein
IDebugExpressionContext2
Objekt von einer IDebugStackFrame2-Schnittstelle und ruft dann dieIDebugStackFrame2::ParseText
Methode auf, um ein IDebugExpression2-Objekt zu erhalten.Das Debuggen eines Pakets ruft die Methode EvaluateSync oder die Methode EvaluateAsync auf, um den Wert des Ausdrucks zu ermitteln.
IDebugExpression2::EvaluateAsync
wird aus dem Fenster Befehl/Immediate aufgerufen. Alle anderen UI-Komponenten rufenIDebugExpression2::EvaluateSync
auf.Das Ergebnis der Ausdrucksauswertung ist ein IDebugProperty2-Objekt, das den Namen, den Typ und den Wert des Ergebnisses der Ausdrucksauswertung enthält.
Während der Ausdrucksauswertung benötigt die EE Informationen von der Symbolanbieterkomponente. Der Symbolanbieter liefert die symbolischen Informationen, die zur Identifizierung und zum Verständnis des geparsten Ausdrucks verwendet werden.
Wenn die asynchrone Ausdrucksbewertung abgeschlossen ist, wird ein asynchrones Ereignis vom DE über den Session Debug Manager (SDM) gesendet, um die IDE zu informieren, dass die Ausdrucksbewertung abgeschlossen ist. Und das Ergebnis der Auswertung wird dann durch den Aufruf der Methode
IDebugExpression2::EvaluateSync
zurückgegeben.
Hinweise zur Implementierung
Die Visual Studio-Debug-Engines erwarten, dass sie über Common Language Runtime (CLR)-Schnittstellen mit dem Ausdrucksauswerter kommunizieren. Daher muss ein Ausdrucksauswerter, der mit den Debugging-Engines von Visual Studio funktioniert, die CLR unterstützen (eine vollständige Liste aller CLR-Debugging-Schnittstellen finden Sie in debugref.doc, das Teil des Windows Software Development Kit (SDK) ist).