Erstellen von benutzerdefinierten Datenschnellansichten

Eine Schnellansicht ist Teil der Benutzeroberfläche des Visual Studio-Debuggers, in der eine Variable oder ein Objekt auf eine für den jeweiligen Datentyp geeignete Weise angezeigt wird. Eine HTML-Schnellansicht interpretiert beispielsweise eine HTML-Zeichenfolge und zeigt das Ergebnis so an, wie es in einem Browserfenster angezeigt würde. Eine Bitmap-Schnellansicht interpretiert eine Bitmapstruktur und zeigt die zugehörige Grafik an. In einigen Schnellansichten können Sie die Daten nicht nur anzeigen, sondern auch bearbeiten.

Der Visual Studio-Debugger beinhaltet sechs Standardschnellansichten. Die Text-, HTML-, XML-und JSON-Schnellansichten funktionieren bei Zeichenfolgenobjekten. Die WPF-Strukturschnellansicht zeigt die Eigenschaften der visuellen Struktur eines WPF-Objekts an. Die DataSet-Schnellansicht funktioniert für DataSet-, DataView- und DataTable-Objekte.

Weitere Schnellansichten können von Microsoft, Drittanbietern und aus der Community heruntergeladen werden. Sie können auch eigene Schnellansichten schreiben und sie im Visual Studio-Debugger installieren.

Im Debugger wird eine Schnellansicht durch das Lupensymbol VisualizerIcon dargestellt. Das Symbol steht in einem Datentipp, im Überwachungsfenster des Debuggers oder im Dialogfeld Schnellüberwachung zur Verfügung. Wählen Sie dieses Symbol und dann die geeignete Schnellansicht für das entsprechende Objekt aus.

Schreiben von benutzerdefinierten Schnellansichten

Hinweis

Im Beispiel Schnellansicht für eine SQLite-Instanz beim nativen Debuggen ist beschrieben, wie Sie eine benutzerdefinierte Schnellansicht für nativen Code erstellen. Benutzerdefinierte Schnellansichten werden für UWP- und Windows 8.x-Apps nicht unterstützt.

Sie können für ein Objekt einer beliebigen verwalteten Klasse eine benutzerdefinierte Schnellansicht schreiben. Ausnahmen stellen Object und Array dar.

Die Architektur einer Debuggerschnellansicht besteht aus zwei Teilen:

  • Die Debuggerseite, die im Visual Studio-Debugger ausgeführt wird, erstellt die Benutzeroberfläche der Schnellansicht und zeigt diese an.

  • Die zu debuggende Seite wird innerhalb des Prozesses ausgeführt, den Visual Studio debuggt (die zu debuggende Komponente). Das darzustellende Datenobjekt (z. B. ein Zeichenfolgenobjekt) ist im zu debuggenden Prozess vorhanden. Die zu debuggende Seite sendet das Objekt an die Debuggerseite, die es auf der von Ihnen erstellten Benutzeroberfläche anzeigt.

Die Debuggerseite empfängt das Datenobjekt von einem Objektanbieter, der die IVisualizerObjectProvider-Oberfläche implementiert. Die zu debuggende Seite sendet das Objekt über die Objektquelle, die von VisualizerObjectSource abgeleitet wird.

Der Objektanbieter kann auch Daten an die Objektquelle zurücksenden. Dadurch können Sie eine Schnellansicht schreiben, die Daten bearbeiten kann. Sie überschreiben den Objektanbieter, um mit der Ausdrucksauswertung und der Objektquelle zu kommunizieren.

Die zu debuggende Seite und die Debuggerseite kommunizieren miteinander über Stream-Methoden, die ein Datenobjekt in einem Stream serialisieren und anschließend den Stream wieder in ein Datenobjekt konvertieren (deserialisieren).

Sie können für einen generischen Typ nur dann eine Schnellansicht schreiben, wenn es sich um einen offenen Typ handelt. Diese Einschränkung entspricht der Einschränkung bei Verwendung des DebuggerTypeProxy-Attributs. Einzelheiten finden Sie unter Verwenden des DebuggerTypeProxy-Attributs.

In benutzerdefinierten Schnellansichten treten möglicherweise Sicherheitsprobleme auf. Siehe Sicherheitsüberlegungen zu Schnellansichten.

Die folgenden Schritte bieten einen allgemeinen Überblick über das Erstellen einer Schnellansicht. Ausführliche Anweisungen dazu finden Sie unter Exemplarische Vorgehensweise: Schreiben einer Schnellansicht in C# oder Exemplarische Vorgehensweise: Schreiben einer Schnellansicht in Visual Basic.

So erstellen Sie die Debuggerseite

Zum Erstellen der Benutzeroberfläche der Schnellansicht auf Debuggerseite erstellen Sie eine Klasse, die von DialogDebuggerVisualizer erbt, und überschreiben die Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show-Methode zum Anzeigen der Oberfläche. Mit IDialogVisualizerService können Sie Windows Forms, Dialogfelder und Steuerelemente in der Schnellansicht anzeigen.

  1. Verwenden Sie IVisualizerObjectProvider-Methoden, damit das visuell dargestellte Objekt auf der Debuggerseite ist.

  2. Erstellen Sie eine Klasse, die von DialogDebuggerVisualizer erbt.

  3. Überschreiben Sie die Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show-Methode, um die Oberfläche anzuzeigen. Mit den IDialogVisualizerService-Methoden können Sie Windows Forms, Dialogfelder und Steuerelemente auf der Oberfläche anzeigen.

  4. Wenden Sie DebuggerVisualizerAttribute an, und lassen Sie es in der Schnellansicht anzeigen (DialogDebuggerVisualizer).

So erstellen Sie die Schnellansichtobjektquelle für die zu debuggende Seite

Bearbeiten Sie im debuggerseitigen Code das Element DebuggerVisualizerAttribute, indem Sie ihm den zu visualisierenden Typ angeben (die zu debuggende Objektquelle) (VisualizerObjectSource). Die Target-Eigenschaft legt die Objektquelle fest. Wenn Sie die Objektquelle weglassen, wird eine Standardobjektquelle für die Schnellansicht verwendet.

Der zu debuggende Code enthält die Objektquelle, die visualisiert wird. Das Datenobjekt kann Methoden von VisualizerObjectSource überschreiben. Eine zu debuggende DLL ist erforderlich, wenn Sie eine eigenständige Schnellansicht erstellen möchten.

Im zu debuggenden Code:

  • Damit Sie in der Schnellansicht Datenobjekte bearbeiten können, muss die Objektquelle von VisualizerObjectSource erben und die Methoden TransferData oder CreateReplacementObject überschreiben.

  • Wenn Sie in Ihrer Schnellansicht mehrere Ziele unterstützen müssen, können Sie die folgenden Zielframeworkmoniker (Target Framework Monikers, TFMs) in die zu debuggende Projektdatei einfügen.

    <TargetFrameworks>net20;netstandard2.0;netcoreapp2.0</TargetFrameworks>
    

    Dies sind die einzigen unterstützten TFMs.

Siehe auch