Freigeben über


Visualisieren und Anzeigen von Daten

Datentypvisualisierungen und benutzerdefinierte Viewer stellen Daten auf eine Weise dar, die für einen Entwickler schnell verständlich ist. Der Ausdrucksauswerter (EE) kann Visualisierungen von Drittanbietern unterstützen sowie eigene benutzerdefinierte Viewer bereitstellen.

Visual Studio bestimmt, wie viele Typschnellansichten und benutzerdefinierte Viewer dem Objekttyp zugeordnet sind, indem die GetCustomViewerCount-Methode aufgerufen wird. Wenn mindestens ein Typvisualisierer oder ein benutzerdefinierter Viewer verfügbar ist, ruft Visual Studio die GetCustomViewerList-Methode auf, um eine Liste dieser Visualisierer und Viewer abzurufen (tatsächlich eine Liste von Elementen, die die Visualisierer und Viewer implementieren) und sie dem Benutzer präsentiert.

Unterstützung von Typvisualisierern

Es gibt eine Reihe von Schnittstellen, die der EE implementieren muss, um Typvisualisierungen zu unterstützen. Diese Schnittstellen können in zwei allgemeine Kategorien unterteilt werden: Schnittstellen, die die Typvisualisierungen auflisten, und Schnittstellen, die auf die Eigenschaftsdaten zugreifen.

Auflistung von Typvisualisierungen

Das EE unterstützt die Auflistung der Typ-Visualizer in der Implementierung von IDebugProperty3::GetCustomViewerCount und IDebugProperty3::GetCustomViewerList. Diese Methoden übergeben den Aufruf der entsprechenden Methoden "GetCustomViewerCount " und "GetCustomViewerList".

Der IEEVisualizerService wird durch Aufrufen von CreateVisualizerService abgerufen. Diese Methode erfordert die IDebugBinder3-Schnittstelle , die von der IDebugBinder-Schnittstelle abgerufen wird, die an EvaluateSync übergeben wird. IEEVisualizerServiceProvider::CreateVisualizerService erfordert außerdem die Schnittstellen IDebugSymbolProvider und IDebugAddress, die an IDebugParsedExpression::EvaluateSync übergeben wurden. Die letzte Schnittstelle, die zum Erstellen der IEEVisualizerService Schnittstelle erforderlich ist, ist die IEEVisualizerDataProvider-Schnittstelle , die vom EE implementiert wird. Diese Schnittstelle ermöglicht das Vornehmen von Änderungen an der zu visualisierenden Eigenschaft. Alle Eigenschaftendaten werden in einer IDebugObject-Schnittstelle gekapselt, die auch vom EE implementiert wird.

Zugreifen auf Eigenschaftendaten

Der Zugriff auf Eigenschaftendaten erfolgt über die IPropertyProxyEESide-Schnittstelle . Zum Abrufen dieser Schnittstelle ruft Visual Studio QueryInterface für das Eigenschaftsobjekt auf, um die IPropertyProxyProvider-Schnittstelle abzurufen (implementiert für dasselbe Objekt, das die IDebugProperty3-Schnittstelle implementiert), und ruft dann die GetPropertyProxy-Methode auf, um die IPropertyProxyEESide Schnittstelle abzurufen.

Alle Daten, die an die IPropertyProxyEESide Schnittstelle übergeben werden und aus ihr herauskommen, werden in der IEEDataStorage-Schnittstelle gekapselt. Diese Schnittstelle stellt ein Bytearray dar und wird sowohl von Visual Studio als auch vom EE implementiert. Wenn die Daten einer Eigenschaft geändert werden sollen, erstellt Visual Studio ein IEEDataStorage Objekt, das die neuen Daten enthält, und ruft CreateReplacementObject mit diesem Datenobjekt auf, um ein neues IEEDataStorage Objekt abzurufen, das wiederum an InPlaceUpdateObject übergeben wird, um die Daten der Eigenschaft zu aktualisieren. IPropertyProxyEESide::CreateReplacementObject ermöglicht dem EE, seine eigene Klasse zu instanziieren, die die IEEDataStorage Schnittstelle implementiert.

Unterstützen von benutzerdefinierten Viewern

Das Flag DBG_ATTRIB_VALUE_CUSTOM_VIEWER wird im dwAttrib Feld der DEBUG_PROPERTY_INFO-Struktur (zurückgegeben durch einen Aufruf von GetPropertyInfo) festgelegt, um anzugeben, dass dem Objekt ein benutzerdefinierter Viewer zugeordnet ist. Wenn dieses Flag festgelegt ist, ruft Visual Studio die IDebugProperty3-Schnittstelle über die IDebugProperty2-Schnittstelle mithilfe von QueryInterface ab.

Wenn der Benutzer einen benutzerdefinierten Viewer auswählt, instanziiert Visual Studio den benutzerdefinierten Viewer mithilfe der von der CLSID Methode bereitgestellten IDebugProperty3::GetCustomViewerList Viewer. Visual Studio ruft dann DisplayValue auf, um den Wert für den Benutzer anzuzeigen.

IDebugCustomViewer::DisplayValue In der Regel wird eine schreibgeschützte Ansicht der Daten angezeigt. Um Änderungen an den Daten zuzulassen, muss der EE eine benutzerdefinierte Schnittstelle implementieren, die das Ändern von Daten in einem Eigenschaftsobjekt unterstützt. Die IDebugCustomViewer::DisplayValue Methode verwendet diese benutzerdefinierte Schnittstelle, um das Ändern der Daten zu unterstützen. Die Methode sucht nach der benutzerdefinierten Schnittstelle auf der IDebugProperty2-Schnittstelle, die als pDebugProperty-Argument übergeben wird.

Unterstützen von Typvisualisierern und benutzerdefinierten Viewern

Ein EE kann sowohl Typ-Visualisierer als auch benutzerdefinierte Visualisierer in den Methoden GetCustomViewerCount und GetCustomViewerList unterstützen. Zunächst fügt der EE die Anzahl der benutzerdefinierten Viewer zum Wert hinzu, der von der GetCustomViewerCount-Methode zurückgegeben wurde. Zweitens fügt der EE die CLSIDeigenen benutzerdefinierten Viewer an die Liste an, die von der GetCustomViewerList-Methode zurückgegeben wird.