Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
In Visual Studio 2015 ist diese Methode der Implementierung von Ausdrucksvaluatoren veraltet. Informationen zur Implementierung von CLR-Ausdrucksauswertern finden Sie unter CLR-Ausdrucksauswerter und Beispiel für verwaltete Ausdrucksauswerter.
Das Integrieren einer proprietären Sprache in das Visual Studio-Debugpaket bedeutet, dass Sie die erforderlichen EE-Schnittstellen (Expression evaluator) einrichten und die Common Language-Laufzeitsymbolanbieter (SP) und Ordnerschnittstellen aufrufen müssen. Die SP- und Binder-Objekte sind zusammen mit der aktuellen Ausführungsadresse der Kontext, in dem Ausdrücke ausgewertet werden. Die Informationen, die diese Schnittstellen erzeugen und nutzen, stellen die wichtigsten Konzepte in der Architektur eines EE dar.
Analysieren des Ausdrucks
Wenn Sie ein Programm debuggen, werden Ausdrücke aus einer Reihe von Gründen ausgewertet, aber immer, wenn das zu debuggende Programm an einem Haltepunkt beendet wurde (entweder ein Haltepunkt, der vom Benutzer platziert wurde oder durch eine Ausnahme verursacht wurde). In diesem Moment ruft Visual Studio einen Stapelframe ab, wie durch die IDebugStackFrame2-Schnittstelle dargestellt, aus dem Debugmodul (DE). Visual Studio ruft dann GetExpressionContext auf, um die IDebugExpressionContext2-Schnittstelle abzurufen. Diese Schnittstelle stellt einen Kontext dar, in dem Ausdrücke ausgewertet werden können; ParseText ist der Einstiegspunkt zum Auswertungsprozess. Bis zu diesem Punkt werden alle Schnittstellen von der DE implementiert.
Wenn IDebugExpressionContext2::ParseText aufgerufen wird, instanziiert die DE die EE, die der Sprache der Quelldatei entspricht, in der der Haltepunkt aufgetreten ist (die DE instanziiert zu diesem Zeitpunkt auch die SH). Der EE wird durch die IDebugExpressionEvaluator-Schnittstelle dargestellt. Die DE ruft dann Parse auf, um den Ausdruck (in Textform) in einen analysierten Ausdruck zu konvertieren, der für die Auswertung bereit ist. Dieser analysierte Ausdruck wird durch die IDebugParsedExpression-Schnittstelle dargestellt. Der Ausdruck wird in der Regel analysiert und nicht an diesem Punkt ausgewertet.
Die DE erstellt ein Objekt, das die IDebugExpression2-Schnittstelle implementiert, das IDebugParsedExpression Objekt in das IDebugExpression2 Objekt einfügt und das IDebugExpression2 Objekt aus IDebugExpressionContext2::ParseTextzurückgibt.
Ausdruck auswerten
Visual Studio ruft entweder EvaluateSync oder EvaluateAsync auf, um den analysierten Ausdruck auszuwerten. Beide Methoden rufen EvaluateSync auf (IDebugExpression2::EvaluateSync ruft die Methode sofort auf, während IDebugExpression2::EvaluateAsync die Methode über einen Hintergrundthread aufgerufen wird), um den analysierten Ausdruck auszuwerten und eine IDebugProperty2-Schnittstelle zurückzugeben, die den Wert und typ des analysierten Ausdrucks darstellt.
IDebugParsedExpression::EvaluateSync verwendet die bereitgestellten SH, Adresse und den Binder, um den analysierten Ausdruck in einen tatsächlichen Wert zu konvertieren, der durch die IDebugProperty2 Schnittstelle dargestellt wird.
Beispiel:
Nachdem ein Haltepunkt während der Ausführung eines Programms erreicht wurde, kann der Benutzer eine Variable im Dialogfeld QuickWatch anzeigen. In diesem Dialogfeld werden der Name, der Wert und der Typ der Variablen angezeigt. Der Benutzer kann den Wert in der Regel ändern.
Wenn das Dialogfeld QuickWatch angezeigt wird, wird der Name der zu untersuchenden Variable als Text an ParseText gesendet. Dadurch wird ein IDebugExpression2 -Objekt zurückgegeben, das den analysierten Ausdruck darstellt, in diesem Fall die Variable.
EvaluateSync wird dann aufgerufen, um ein IDebugProperty2 Objekt zu erstellen, das den Wert und typ der Variablen sowie seinen Namen darstellt. Es handelt sich um diese Informationen, die angezeigt werden.
Wenn der Benutzer den Wert der Variablen ändert, wird SetValueAsString mit dem neuen Wert aufgerufen, wodurch der Wert der Variablen im Arbeitsspeicher geändert wird, sodass sie verwendet wird, wenn das Programm fortgesetzt wird.
Weitere Informationen zu diesem Prozess zum Anzeigen der Werte von Variablen finden Sie unter "Anzeigen von Locals ". Weitere Informationen dazu, wie der Wert einer Variablen geändert wird, finden Sie unter Ändern des Werts einer lokalen Variablen.
In diesem Abschnitt
Der Auswertungskontext stellt die Argumente bereit, die übergeben werden, wenn die DE den EE aufruft.
Hauptausdrucksbewertungs-Schnittstellen beschreibt die entscheidenden Schnittstellen, die beim Schreiben eines EE benötigt werden, zusammen mit dem Bewertungskontext.