Freigeben über


Auswertung eines Überwachungsfenster-Ausdrucks

Wichtig

Seit Visual Studio 2015 ist diese Art der Implementierung von Ausdrucksauswertungen veraltet. Informationen zum Implementieren von CLR-Ausdrucksauswertungen finden Sie unter CLR-Ausdrucksauswertungen und Beispiel für die Auswertung verwalteter Ausdrücke.

Wenn die Ausführung pausiert, ruft Visual Studio die Debug Engine (DE) auf, um den aktuellen Wert jedes Ausdrucks in der Überwachungsliste zu ermitteln. Die DE wertet jeden Ausdruck mit einem Ausdrucksauswerter (EE) aus, und Visual Studio zeigt seinen Wert im Überwachungsfenster an.

Im Folgenden finden Sie eine Übersicht darüber, wie ein Überwachungsfenster-Ausdruck ausgewertet wird:

  1. Visual Studio ruft die DE-Funktion GetExpressionContext auf, um einen Ausdruckskontext zu erhalten, der für die Auswertung von Ausdrücken verwendet werden kann.

  2. Für jeden Ausdruck in der Überwachungsliste ruft Visual Studio ParseText auf, um den Text des Ausdrucks in einen geparsten Ausdruck umzuwandeln.

  3. IDebugExpressionContext2::ParseText ruft Parse auf, um die eigentliche Arbeit des Parsens des Textes zu erledigen und ein IDebugParsedExpression-Objekt zu erzeugen.

  4. IDebugExpressionContext2::ParseText erstellt ein IDebugExpression2-Objekt und fügt das IDebugParsedExpression-Objekt darin ein. Dieses IDebugExpression2-Objekt wird dann an Visual Studio zurückgegeben.

  5. Visual Studio ruft EvaluateSync auf, um den geparsten Ausdruck auszuwerten.

  6. IDebugExpression2::EvaluateSync übergibt den Aufruf von EvaluateSync, um die tatsächliche Auswertung auszuführen und ein IDebugProperty2-Objekt zu erstellen, das an Visual Studio zurückgegeben wird.

  7. Visual Studio ruft GetPropertyInfo auf, um den Wert des Ausdrucks abzurufen, der dann in der Überwachungsliste angezeigt wird.

Parsen und dann auswerten

Da das Parsen eines komplexen Ausdrucks viel mehr Zeit in Anspruch nehmen kann als seine Auswertung, wird der Prozess der Auswertung eines Ausdrucks in zwei Schritte aufgeteilt: 1) Parsen des Ausdrucks und 2) Auswerten des geparsten Ausdrucks. Auf diese Weise kann die Auswertung viele Male erfolgen, aber der Ausdruck muss nur einmal geparst werden. Der geparste Zwischenausdruck wird von der EE in einem IDebugParsedExpression-Objekt zurückgegeben, das wiederum gekapselt ist und vom DE als IDebugExpression2-Objekt zurückgegeben wird. Das IDebugExpression-Objekt verschiebt alle Auswertungen auf das IDebugParsedExpression-Objekt selbst.

Hinweis

Es ist nicht notwendig, dass eine EE diesen zweistufigen Prozess einhält, auch wenn Visual Studio dies voraussetzt. Die EE kann im selben Schritt parsen und evaluieren, wenn EvaluateSync aufgerufen wird (so funktioniert z. B. das Beispiel MyCEE). Wenn Ihre Sprache komplexe Ausdrücke bilden kann, möchten Sie vielleicht den Schritt des Parsens vom Schritt der Auswertung trennen. Dies kann die Leistung im Visual Studio-Debugger erhöhen, wenn viele Überwachungsausdrücke angezeigt werden.

In diesem Abschnitt

Beispielimplementierung der Ausdrucksauswertung verwendet das MyCEE-Beispiel, um den Prozess der Ausdrucksauswertung zu durchlaufen.

Auswertung eines Überwachungsausdrucks erklärt, was nach einer erfolgreichen Ausdrucksanalyse passiert.