Delen via


Visualizer-architectuur

De architectuur van een debugger-visualisator heeft twee onderdelen:

  • De debugger-zijde draait binnen de Visual Studio-debugger. De code aan de debugkant maakt en toont de gebruikersinterface voor uw visualisator.

  • De debugzijde wordt uitgevoerd binnen het proces dat Visual Studio aan het debuggen is (de debuggee).

    Een visualizer is een foutopsporingsprogrammaonderdeel waarmee het foutopsporingsprogramma de inhoud van een gegevensobject in een zinvolle, begrijpelijke vorm kan weergeven (visualiseren). Sommige visuals ondersteunen ook het bewerken van het gegevensobject. Door aangepaste visualisaties te schrijven, kunt u het foutopsporingsprogramma uitbreiden om uw eigen aangepaste gegevenstypen te verwerken.

    Het gegevensobject dat moet worden gevisualiseerd, bevindt zich binnen het proces dat u aan het debuggen bent (het foutopsporingsproces). De gebruikersinterface die de gegevens weergeeft, wordt gemaakt in het visual Studio-foutopsporingsprogramma:

Debuggerproces Foutopsporingsproces
Gebruikersinterface voor foutopsporingsprogramma (DataTips, Watch Window, QuickWatch) Gegevensobject dat moet worden gevisualiseerd

Als u het gegevensobject in de foutopsporingsprogramma-interface wilt visualiseren, hebt u code nodig om te communiceren tussen de twee processen. De visualisatiearchitectuur bestaat daarom uit twee onderdelen: code van de debugger en code van het foutopsporingsdoel.

De code aan de debuggerzijde maakt een eigen gebruikersinterface die kan worden aangeroepen vanuit de debuggerinterface, zoals een DataTip, het Controlevenster of QuickWatch. De visualizer-interface wordt gemaakt met behulp van de DialogDebuggerVisualizer klasse en de IDialogVisualizerService interface. Net als alle Visualizer-API's worden DialogDebuggerVisualizer en IDialogVisualizerService gevonden in de Microsoft.VisualStudio.DebuggerVisualizers naamruimte.

Debuggerkant Foutopsporingszijde
DialogDebuggerVisualizer-klasse

IDialogVisualizerService Interface
Gegevensobject

De gebruikersinterface haalt de gegevens op die moeten worden gevisualiseerd vanuit een objectprovider, die aan de kant van het foutopsporingsprogramma bestaat:

Debuggerzijde Foutopsporingsdoel
DialogDebuggerVisualizer-klasse

IDialogVisualizerService Interface
Gegevensobject
Objectprovider (implementeert IVisualizerObjectProvider)

Er is een bijbehorend object aan de kant van het te debuggen proces genaamd de Object Source.

Debugzijde Debugee-zijde
DialogDebuggerVisualizer-klasse

IDialogVisualizerService Interface
Gegevensobject
Objectprovider (implementeert IVisualizerObjectProvider) Objectbron (afgeleid van VisualizerObjectSource)

De objectprovider biedt de objectgegevens die moeten worden gevisualiseerd door de visualizer-gebruikersinterface. De objectprovider haalt de objectgegevens op uit de objectbron. De Objectprovider en Objectbron bieden API's voor het communiceren van objectgegevens tussen de debuggerkant en debuggee-kant.

Elke visualizer moet de gegevens ophalen die moeten worden gevisualiseerd. In de volgende tabel ziet u de bijbehorende API's die voor dit doel worden gebruikt door de objectprovider en de objectbron:

Objectprovider Objectbron
GetData

— of —

GetObject
GetData

Merk op dat de objectprovider zowel GetData als GetObject kan gebruiken. Een API resulteert in een aanroep naar GetData de objectbron. Een aanroep naar Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData vult een System.IO.Stream in, wat een geserialiseerde vorm van het object vertegenwoordigt dat wordt gevisualiseerd.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject deserializeert de gegevens terug naar objectvorm, die u vervolgens kunt weergeven in de gebruikersinterface die u maakt met DialogDebuggerVisualizer. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData vult de data in als een ruwe Stream, die je zelf moet deserialiseren. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject werkt door aan te roepen Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData om de geserialiseerde Streamgegevens op te halen en vervolgens deserialiseren van de gegevens. Gebruik Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData wanneer het object niet kan worden geserialiseerd door .NET en aangepaste serialisatie vereist is. In dat geval moet u ook de Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize methode overschrijven.

Als u een alleen-lezen visualisatie maakt, is communicatie in één richting met GetData of GetObject voldoende. Als u een visualisatie maakt die ondersteuning biedt voor het bewerken van gegevensobjecten, moet u meer doen. U moet ook een gegevensobject van de objectprovider naar de objectbron kunnen verzenden. In de volgende tabel ziet u de objectprovider- en objectbron-API's die voor dit doel worden gebruikt:

Objectprovider Objectbron
ReplaceData

— of —

ReplaceObject
CreateReplacementObject

U ziet nogmaals dat er twee API's zijn die de objectprovider kan gebruiken. Gegevens worden altijd als een Stream van de Object Provider naar de Object Source verzonden, maar ReplaceData vereist dat u het object zelf in een Stream serialiseert.

ReplaceObject neemt een object dat u opgeeft, serialiseert het in een Streamen roept vervolgens ReplaceData aan om het Stream naar te CreateReplacementObjectverzenden.

Met een van de Vervangen-methoden wordt een nieuw gegevensobject gemaakt in de debugomgeving, dat het weergegeven object vervangt. Als u de inhoud van het oorspronkelijke object wilt wijzigen zonder het te vervangen, gebruikt u een van de methoden voor overdracht die in de volgende tabel worden weergegeven. Met deze API's worden gegevens tegelijkertijd in beide richtingen overgedragen, zonder het object te vervangen dat wordt gevisualiseerd:

Objectprovider Objectbron
TransferData

— of —

TransferObject
TransferData