Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Vanaf Visual Studio 2022 versie 17.9 kunnen visualizers nu worden geschreven in .NET 6.0+, die buiten het proces worden uitgevoerd met behulp van het nieuwe VisualStudio.Extensibility-model. Zie de documentatie bij Visual Studio-foutopsporingsprogramma's maken voor extensies die zijn gemaakt met behulp van het nieuwe model. Als u oudere versies van Visual Studio wilt ondersteunen of uw aangepaste visuals wilt verzenden als onderdeel van een bibliotheek-DLL, gebruikt u de informatie in dit artikel, die alleen van toepassing is op het oudere model voor uitbreidingsontwikkeling (VSSDK).
Een visualizer maakt deel uit van de gebruikersinterface van visual Studio-foutopsporingsprogramma waarmee een variabele of object wordt weergegeven op een manier die geschikt is voor het gegevenstype. Een bitmap visualiseren interpreteert bijvoorbeeld een bitmapstructuur en geeft de afbeelding weer die deze vertegenwoordigt. Met sommige visuals kunt u de gegevens wijzigen en weergeven. In het foutopsporingsprogramma wordt een visualizer vertegenwoordigd door een vergrootglaspictogram . U kunt het pictogram selecteren in een DataTip-, foutopsporingsvenster of het dialoogvenster QuickWatch en vervolgens de juiste visualisatie voor het bijbehorende object selecteren.
Naast de standaard ingebouwde visualizers zijn er mogelijk meer visualizers beschikbaar om te downloaden van Microsoft, derden en de community. U kunt ook uw eigen visuals schrijven en installeren in het Visual Studio-foutopsporingsprogramma.
Dit artikel biedt een algemeen overzicht van het maken van visualisaties. Zie in plaats daarvan de volgende artikelen voor gedetailleerde instructies:
- Walkthrough: Een visualisatie schrijven in C#
- Stapsgewijze handleiding: Een visualizer schrijven in Visual Basic
- Een visualizer installeren
- Zie het element UIVisualizer in de Natvis-documentatie. Zie ook het systeemeigen SQLite Debugger Visualizer-voorbeeld .
Opmerking
Aangepaste visuals worden niet ondersteund voor UWP-apps (Universal Windows Platform) en Windows 8.x.
Overzicht
U kunt een aangepaste visualisatie schrijven voor een object van een beheerde klasse, met uitzondering Object van en Array.
De architectuur van een foutopsporger visualisatie heeft twee onderdelen:
De kant van het foutopsporingsprogramma wordt uitgevoerd in het Visual Studio-foutopsporingsprogramma en maakt en geeft de gebruikersinterface van de visualizer weer.
Omdat Visual Studio wordt uitgevoerd op .NET Framework Runtime, moet dit onderdeel worden geschreven voor .NET Framework. Daarom is het niet mogelijk om het te schrijven voor .NET Core.
De foutopsporingszijde wordt uitgevoerd binnen het proces dat Visual Studio uitvoert, is foutopsporing (de foutopsporing). Het gegevensobject dat moet worden gevisualiseerd (bijvoorbeeld een tekenreeksobject) bestaat in het proces voor foutopsporing. De onderzoekszijde stuurt het object naar de debuggerzijde, die het weergeeft in de gebruikersinterface die u creƫert.
De runtime waarvoor u dit onderdeel bouwt, moet overeenkomen met de runtime waarin het foutopsporingsproces wordt uitgevoerd, dat wil bijvoorbeeld .NET Framework of .NET Core.
De foutopsporingsprogrammazijde ontvangt het gegevensobject van een objectprovider die de IVisualizerObjectProvider interface implementeert. De foutopsporingszijde verzendt het object via de objectbron, die is afgeleid van VisualizerObjectSource.
De objectprovider kan ook gegevens terugsturen naar de objectbron, waarmee u een visual kunt schrijven waarmee u gegevens kunt bewerken. U overschrijft de objectprovider om te communiceren met de expressie-evaluator en de objectbron.
De debugzijde en de debuggerzijde communiceren met elkaar via Stream methoden, waarbij een gegevensobject in een Stream wordt geserialiseerd en de Stream weer wordt gedeserialiseerd naar een gegevensobject.
U kunt alleen een visualizer voor een generiek type schrijven als het type een open type is. Deze beperking is hetzelfde als de beperking bij het gebruik van het DebuggerTypeProxy
kenmerk. Zie Het kenmerk DebuggerTypeProxy gebruiken voor meer informatie.
Aangepaste visualisatoren kunnen beveiligingsoverwegingen hebben. Zie Beveiligingsoverwegingen voor Visualizer.
De gebruikersinterface van het foutopsporingsprogramma maken
Als u de gebruikersinterface van de visualizer aan de kant van het foutopsporingsprogramma wilt maken, maakt u een klasse die wordt overgenomen van DialogDebuggerVisualizeren overschrijft u de Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show methode om de interface weer te geven. U kunt IDialogVisualizerService gebruiken om Windows-formulieren, dialoogvensters en besturingselementen in uw visualisatie weer te geven.
Gebruik IVisualizerObjectProvider methoden om het gevisualiseerde object in de debugger te verkrijgen.
Maak een klasse die wordt overgenomen van DialogDebuggerVisualizer.
Opmerking
Vanwege de beveiligingsproblemen die in de onderstaande sectie worden beschreven, kunnen visualizers vanaf Visual Studio 2022 versie 17.11 het Legacy
formatteringsbeleid niet meer specificeren in de constructor van de basisklasse. Vanaf nu kunnen visualizers alleen JSON-serialisatie gebruiken om te communiceren tussen de onderdelen van de debugger en de debuggee-zijde.
Overschrijf de Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show methode om uw interface weer te geven. Gebruik IDialogVisualizerService methoden om Windows-formulieren, -dialoogvensters en -besturingselementen weer te geven in uw interface.
Pas DebuggerVisualizerAttribute toe, waardoor de visualizer kan weergeven (DialogDebuggerVisualizer).
Speciale overwegingen voor foutopsporingsprogramma's voor .NET 5.0+
Aangepaste visualizers dragen gegevens over tussen de debuggee en debugger door gebruik te maken van binaire serialisatie met de BinaryFormatter-klasse, standaard. Dit soort serialisatie wordt echter beperkt in .NET 5 en hoger vanwege beveiligingsproblemen met betrekking tot de onoplosbare beveiligingsproblemen. Bovendien is het gemarkeerd als volledig verouderd in ASP.NET Core 5 en zal het gebruik hiervan een fout opleveren zoals beschreven staat in de ASP.NET Core-documentatie. In deze sectie worden de stappen beschreven die u moet uitvoeren om ervoor te zorgen dat uw visualizer nog steeds wordt ondersteund in dit scenario.
Vanwege compatibiliteitsredenen neemt de in de voorgaande sectie overschreven Show-methode nog steeds een IVisualizerObjectProvider in ontvangst. Vanaf Visual Studio 2019 versie 16.10 is het echter van het type IVisualizerObjectProvider3. Daarom cast u het
objectProvider
object naar de bijgewerkte interface.Bij het verzenden van objecten, zoals opdrachten of gegevens, naar de debuggee-kant, gebruik de
IVisualizerObjectProvider2.Serialize
methode om deze naar een stream te sturen. Het bepaalt de beste serialisatie-indeling die op basis van de runtime van het debuggee-proces gebruikt moet worden. Geef vervolgens de stream door aan deIVisualizerObjectProvider2.TransferData
methode.Als de debuggee-zijde visualisatiecomponent iets moet terugsturen naar de debugger-zijde, bevindt het zich in het Stream object dat door de TransferData methode wordt geretourneerd. Gebruik de methode
IVisualizerObjectProvider2.GetDeserializableObjectFrom
om een IDeserializableObject instantie ervan op te halen en naar behoefte te verwerken; of gebruik DeserializeFromJson als het een type is dat u kunt deserialiseren.
Raadpleeg de sectie Speciale overwegingen voor foutopsporing voor .NET 5.0+ om te zien welke andere wijzigingen vereist zijn aan de foutopsporingszijde wanneer binaire serialisatie wordt gebruikt, niet wordt ondersteund.
Opmerking
Als u meer informatie over het probleem wilt, raadpleegt u de beveiligingshandleiding BinaryFormatter.
De objectbron van de visualizer maken voor de foutopsporingszijde
Bewerk in de side-code van het foutopsporingsprogramma de DebuggerVisualizerAttributecode, zodat deze het type kan visualiseren (de objectbron aan de foutopsporingszijde) (VisualizerObjectSource). Met Target
de eigenschap wordt de objectbron ingesteld. Als u de objectbron weglaat, gebruikt de visualizer een standaardobjectbron.
De sidecode voor foutopsporing bevat de objectbron die wordt gevisualiseerd. Het gegevensobject kan methoden van VisualizerObjectSource overschrijven. Een DLL aan de kant van foutopsporing is nodig als u een zelfstandige visualisatie wilt maken.
In de code aan de foutopsporingszijde:
Om de visualizer gegevensobjecten te laten bewerken, moet de objectsource van VisualizerObjectSource erven en de
TransferData
ofCreateReplacementObject
methoden overschrijven.Als u multi-targeting wilt ondersteunen in uw visualizer, kunt u de volgende Target Framework Monikers (TFM's) gebruiken in het projectbestand van de toepassing die u wilt debuggen.
<TargetFrameworks>net20;netstandard2.0;netcoreapp2.0</TargetFrameworks>
Dit zijn de enige ondersteunde TFM's.
Speciale aandachtspunten voor foutopsporing aan de zijkant voor .NET 5.0+
Belangrijk
Mogelijk zijn er extra stappen nodig om een visualizer te laten werken vanaf .NET 5.0 vanwege beveiligingsproblemen met betrekking tot de onderliggende binaire serialisatiemethode die standaard wordt gebruikt. Lees deze sectie voordat u doorgaat.
Als de visualizer de TransferData methode implementeert, gebruikt u de zojuist toegevoegde GetDeserializableObject methode die beschikbaar is in de nieuwste versie van
VisualizerObjectSource
. Het IDeserializableObject dat het retourneert helpt bij het bepalen van de serialisatie-indeling van het object (binair of JSON) en voor het deserialiseren van het onderliggende object, zodat het kan worden gebruikt.Als de debuggee-zijde gegevens retourneert naar de debugger-zijde als onderdeel van de
TransferData
aanroep, serialiseer dan het antwoord op de stroom van de debugger-zijde via de Serialize methode.