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 Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData wird ein System.IO.Stream eingefügt, der eine serialisierte Form des visualisierten Objekts darstellt.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject deserialisiert die Daten wieder in ein Objekt, das Sie anschließend auf der Benutzeroberfläche anzeigen können, die Sie mit DialogDebuggerVisualizer erstellen. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData füllt mit Daten als unformatiertem Stream auf, den Sie selbst deserialisieren müssen. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject ruft Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData auf, um den serialisierten Stream abzurufen und deserialisiert dann die Daten. Verwenden Sie Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData, wenn das Objekt von .NET nicht serialisiert werden kann und benutzerdefiniert serialisiert werden muss. In diesem Fall müssen Sie auch die Microsoft.VisualStudio.DebuggerVisualizers.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 Stream gesendet, aber durch ReplaceData müssen Sie das Objekt selbst in einen Stream serialisieren.

ReplaceObject akzeptiert ein von Ihnen bereitgestelltes Objekt, serialisiert es in einen Stream und ruft dann ReplaceData auf, um den 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