Freigeben über


Schnellansichtarchitektur

Die Architektur einer Debuggerschnellansicht besteht aus zwei Teilen:

  • Die Debuggerseite wird innerhalb des Visual Studio-Debuggers ausgeführt. Im debuggerseitigen Code wird die Benutzeroberfläche für die Schnellansicht erstellt und angezeigt.

  • Die zu debuggende Seite wird innerhalb des Prozesses ausgeführt, den Visual Studio debuggt (die zu debuggende Komponente).

Eine Schnellansicht ist eine Debuggerkomponente, mit der der Debugger die Inhalte eines Datenobjekts in aussagekräftiger, verständlicher Form anzeigen (visualisieren) kann. Einige Schnellansichten unterstützen auch die Bearbeitung des Datenobjekts. Sie können den Debugger erweitern, um eigene benutzerdefinierte Datentypen zu behandeln, indem Sie benutzerdefinierte Schnellansichten schreiben.

Das Datenobjekt, das visualisiert werden soll, befindet sich innerhalb des Prozesses, den Sie debuggen (der zu debuggende Prozess). Die Benutzeroberfläche, die die Daten anzeigt, wird innerhalb des Visual Studio-Debuggerprozesses erstellt:

Debuggerprozess

Zu debuggender Prozess

Debuggerbenutzeroberfläche (DataTips, Überwachenfenster, Schnellüberwachung)

Zu visualisierendes Datenobjekt

Um das Datenobjekt innerhalb der Debuggerschnittstelle zu visualisieren, benötigen Sie Code zur Kommunikation zwischen den beiden Prozessen. Infolgedessen besteht die Schnellansichtarchitektur aus zwei Teilen: aus debuggerseitigem Code und aus Code der zu debuggenden Seite.

Der debuggerseitige Code erstellt eine eigene Benutzeroberfläche, die von der Debuggerschnittstelle aufgerufen werden kann, zum Beispiel DataTip, das Überwachungsfenster oder die Schnellüberwachung. Die Schnellansichtschnittstelle wird mithilfe der DialogDebuggerVisualizer-Klasse und der IDialogVisualizerService-Schnittstelle erstellt. Wie alle Schnellansicht-APIs befinden sich DialogDebuggerVisualizer und IDialogVisualizerService im Microsoft.VisualStudio.DebuggerVisualizers-Namespace.

Debuggerseite

Zu debuggende Seite

DialogDebuggerVisualizer-Klasse

IDialogVisualizerService-Schnittstelle

Datenobjekt

Die Benutzeroberfläche ruft die zu visualisierenden Daten von einem Objektanbieter auf Debuggerseite ab.

Debuggerseite

Zu debuggende Seite

DialogDebuggerVisualizer-Klasse

IDialogVisualizerService-Schnittstelle

Datenobjekt

Objektanbieter (implementiert IVisualizerObjectProvider)

Auf der zu debuggenden Seite ist ein entsprechendes Objekt vorhanden, das als Objektquelle bezeichnet wird:

Debuggerseite

Zu debuggende Seite

DialogDebuggerVisualizer-Klasse

IDialogVisualizerService-Schnittstelle

Datenobjekt

Objektanbieter (implementiert IVisualizerObjectProvider)

Objektquelle (abgeleitet von VisualizerObjectSource)

Der Objektanbieter stellt der Schnellansicht-Benutzeroberfläche die zu visualisierenden Objektdaten bereit. Der Objektanbieter ruft die Objektdaten von der Objektquelle ab. Der Objektanbieter und die Objektquelle stellen APIs bereit, um Objektdaten zwischen der Debuggerseite und der zu debuggenden Seite zu übertragen.

Jede Schnellansicht muss das zu visualisierende Datenobjekt abrufen. Die folgende Tabelle zeigt die entsprechenden APIs, die der Objektanbieter und die Objektquelle zu diesem Zweck verwenden:

Objektanbieter

Objektquelle

GetData

– oder –

GetObject

GetData

Beachten Sie, dass der Objektanbieter GetData oder GetObject verwenden kann. Jede API führt zu einem Anruf von GetData in der Objektquelle. Durch einen Aufruf von VisualizerObjectSource.GetData wird ein [System.IO.Stream] eingefügt, der eine serialisierte Form des visualisierten Objekts darstellt.

IVisualizerObjectProvider.GetObject deserialisiert die Daten wieder in ein Objekt, das Sie anschließend in der Benutzeroberfläche anzeigen können, die Sie mit DialogDebuggerVisualizer erstellen. IVisualizerObjectProvider.GetData füllt mit Daten als unformatiertem [System.IO.Stream] auf, den Sie selbst deserialisieren müssen. IVisualizerObjectProvider.GetObject ruft IVisualizerObjectProvider.GetData auf, um den serialisierten [System.IO.Stream] abzurufen und deserialisiert dann die Daten. Verwenden Sie IVisualizerObjectProvider.GetData, wenn das Objekt von .NET nicht serialisiert werden kann und benutzerdefiniert serialisiert werden muss. In diesem Fall müssen Sie auch die VisualizerObjectSource.Serialize-Methode überschreiben.

Wenn Sie eine schreibgeschützte Schnellansicht erstellen, genügt eine unidirektionale Kommunikation mit GetData oder GetObject. Wenn Sie eine Schnellansicht erstellen, die die Bearbeitung von Datenobjekten unterstützt, müssen Sie weitere Schritte durchführen. Sie müssen ein Datenobjekt auch vom Objektanbieter zurück zur Objektquelle senden können. Die folgende Tabelle zeigt den Objektanbieter und die Objektquellen-APIs, die für diesen Zweck verwendet werden:

Objektanbieter

Objektquelle

ReplaceData

– oder –

ReplaceObject

CreateReplacementObject

Beachten Sie wieder, dass es zwei APIs gibt, die der Objektanbieter verwenden kann. Daten werden vom Objektanbieter zur Objektquelle immer als [System.IO.Stream] gesendet, aber durch ReplaceData müssen Sie das Objekt selbst in einen [System.IO.Stream] serialisieren.

ReplaceObject akzeptiert ein von Ihnen bereitgestelltes Objekt, serialisiert es in einen [System.IO.Stream] und ruft dann ReplaceData auf, um den [System.IO.Stream] an CreateReplacementObject zu senden.

Durch Verwendung einer der Methoden zum Ersetzen wird in der zu debuggenden Komponente ein neues Datenobjekt erstellt, das das visualisierte Objekt ersetzt. Wenn Sie den Inhalt des ursprünglichen Objekts ändern möchten, ohne es zu ersetzen, verwenden Sie eine der Übertragungsmethoden aus der folgenden Tabelle. Diese APIs übertragen Daten gleichzeitig in beide Richtungen, ohne das Objekt zu ersetzen, das visualisiert wird:

Objektanbieter

Objektquelle

TransferData

– oder –

TransferObject

TransferData

Siehe auch

Aufgaben

Gewusst wie: Schreiben einer Schnellansicht

Exemplarische Vorgehensweise: Schreiben einer Schnellansicht in C#

Exemplarische Vorgehensweise: Schreiben einer Schnellansicht in Visual Basic

Exemplarische Vorgehensweise: Schreiben einer Schnellansicht in Visual Basic

Konzepte

Sicherheitsüberlegungen zu Schnellansichten