Architecture d'un visualiseurVisualizer Architecture

L'architecture d'un visualiseur du débogueur comporte deux parties :The architecture of a debugger visualizer has two parts:

  • Le côté débogueur s’exécute dans le débogueur Visual Studio.The debugger side runs within the Visual Studio debugger. Le code côté débogueur crée et affiche l'interface utilisateur de votre visualiseur.The debugger-side code creates and displays the user interface for your visualizer.

  • Le côté programme débogué s’exécute dans le processus que Visual Studio débogue (le programme débogué).The debuggee side runs within the process Visual Studio is debugging (the debuggee).

    Un visualiseur est un composant de débogueur qui permet au débogueur afficher (visualiser) le contenu d’un objet de données sous forme explicite, compréhensible.A visualizer is a debugger component that enables the debugger to display (visualize) the contents of a data object in a meaningful, understandable form. Certains visualiseurs prennent également en charge la modification de l'objet de données.Some visualizers support editing of the data object also. En écrivant des visualiseurs personnalisés, vous pouvez étendre les fonctionnalités du débogueur afin de gérer vos propres types de données personnalisés.By writing custom visualizers, you can extend the debugger to handle your own custom data types.

    L’objet de données à visualiser réside dans le processus de débogage (le programme débogué processus).The data object to be visualized resides within the process you are debugging (the debuggee process). L'interface utilisateur qui affiche les données est créée dans le processus du débogueur Visual Studio :The user interface that will display the data is created within the Visual Studio debugger process:

Processus du débogueurDebugger Process Processus du programme déboguéDebuggee Process
Interface utilisateur du débogueur (DataTips, fenêtre Espion, Espion express)Debugger user interface (DataTips, Watch Window, QuickWatch) Objet de données à visualiserData Object to be visualized

Pour visualiser l'objet de données dans l'interface du débogueur, vous avez besoin de code afin d'établir une communication entre les deux processus.To visualize the data object within the debugger interface, you need code to communicate between the two processes. Par conséquent, l’architecture du visualiseur se compose de deux parties : côté débogueur code et côté programme débogué code.Consequently, the visualizer architecture consists of two parts: debugger side code and debuggee side code.

Le code côté débogueur crée sa propre interface utilisateur, laquelle peut être appelée à partir de l'interface du débogueur, par exemple un DataTip, la fenêtre Espion ou l'Espion express.The debugger-side code creates its own user interface, which can be invoked from the debugger interface, such as a DataTip, the Watch Window, or QuickWatch. L'interface du visualiseur est créée via la classe DialogDebuggerVisualizer et l'interface IDialogVisualizerService.The visualizer interface is created by using the DialogDebuggerVisualizer class and the IDialogVisualizerService interface. Comme toutes les API du visualiseur, DialogDebuggerVisualizer et IDialogVisualizerService se trouvent dans l'espace de noms Microsoft.VisualStudio.DebuggerVisualizers.Like all Visualizer APIs, DialogDebuggerVisualizer and IDialogVisualizerService are found in the Microsoft.VisualStudio.DebuggerVisualizers namespace.

Côté débogueurDebugger Side Côté programme déboguéDebuggee Side
Classe DialogDebuggerVisualizerDialogDebuggerVisualizer Class

Interface IDialogVisualizerServiceIDialogVisualizerService Interface
Objet de donnéesData Object

L'interface utilisateur obtient les données à visualiser à partir d'un fournisseur d'objets, qui existe côté débogueur :The user interface gets the data to be visualized from an Object Provider, which exists on the debugger side:

Côté débogueurDebugger Side Côté programme déboguéDebuggee Side
Classe DialogDebuggerVisualizerDialogDebuggerVisualizer Class

Interface IDialogVisualizerServiceIDialogVisualizerService Interface
Objet de donnéesData Object
Fournisseur d'objets (implémente IVisualizerObjectProvider)Object Provider (implements IVisualizerObjectProvider)

Il y a un objet correspondant côté programme débogué, que l'on appelle source de l'objet :There is a corresponding object on the debuggee side called the Object Source:

Côté débogueurDebugger Side Côté programme déboguéDebuggee Side
Classe DialogDebuggerVisualizerDialogDebuggerVisualizer Class

Interface IDialogVisualizerServiceIDialogVisualizerService Interface
Objet de donnéesData Object
Fournisseur d'objets (implémente IVisualizerObjectProvider)Object Provider (implements IVisualizerObjectProvider) Source de l'objet (dérivée de VisualizerObjectSource)Object Source (derived from VisualizerObjectSource)

Le fournisseur d'objets fournit les données d'objet qui seront visualisées via l'interface utilisateur du visualiseur.The Object Provider provides the object data that is to be visualized to the visualizer UI. Le fournisseur d'objets obtient les données d'objet à partir de la source de l'objet.The Object Provider gets the object data from the Object Source. Le fournisseur d'objets et la source de l'objet fournissent des API pour permettre la communication des données d'objet entre le débogueur et le programme débogué.The Object Provider and Object Source provide APIs to communicate object data between the debugger side and the debugee side.

Chaque visualiseur doit obtenir l'objet de données à visualiser.Every visualizer must get the data object to be visualized. Le tableau suivant affiche les API correspondantes utilisées à cet effet par le fournisseur d'objets et la source de l'objet :The following table shows the corresponding APIs that the Object Provider and Object Source use for this purpose:

Fournisseur d'objetsObject Provider Source de l'objetObject Source
GetData

- ou -—or—

GetObject
GetData

Notez que le fournisseur d'objets peut utiliser GetData ou GetObject.Notice that the object provider can use either GetData or GetObject. Les deux API entraînent l'appel de GetData sur la source de l'objet.Either API results in a call to GetData on the Object Source. Un appel à Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData remplit un System.IO.Stream qui représente une forme sérialisée de l'objet visualisé.A call to Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData fills in a System.IO.Stream, which represents a serialized form of the object that is being visualized.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject désérialise les données sous forme d'objet que vous pouvez ensuite afficher dans l'interface utilisateur créée à l'aide de DialogDebuggerVisualizer.Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject deserializes the data back into object form, which you can then display in the UI you create with DialogDebuggerVisualizer. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData remplit les données sous forme de Stream brut, que vous devez désérialiser vous-même.Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData fills in the data as a raw Stream, which you must deserialize yourself. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject fonctionne en appelant Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData pour obtenir le Stream sérialisé, puis en désérialisant les données.Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject works by calling Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData to get the serialized Stream, then deserializing the data. Utilisez Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData lorsque l'objet n'est pas sérialisable par le .NET et qu'il requiert une sérialisation personnalisée.Use Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData when the object is not serializable by .NET and requires custom serialization. Dans ce cas, vous devez également substituer la méthode Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize.In that case, you must also override the Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize method.

Si vous créez un visualiseur en lecture seule, une communication unidirectionnelle avec GetData ou GetObject suffit.If you are creating a read-only visualizer, one-way communication with GetData or GetObject is sufficient. Si vous créez un visualiseur qui prend en charge la modification des objets de données, vous devez effectuer des tâches supplémentaires.If you are creating a visualizer that supports editing of data objects, you must do more. Vous devez également être en mesure de renvoyer un objet de données du fournisseur d'objets à la source de l'objet.You must be able to send a data object from the Object Provider back to the Object Source also. Le tableau suivant affiche les API utilisées à cet effet par le fournisseur d'objets et la source de l'objet :The following table shows the Object Provider and Object Source APIs used for this purpose:

Fournisseur d'objetsObject Provider Source de l'objetObject Source
ReplaceData

- ou -—or—

ReplaceObject
CreateReplacementObject

Notez à nouveau qu'il y a deux API utilisables par le fournisseur d'objets.Notice, again, that there are two APIs which the Object Provider can use. Les données sont toujours envoyées du fournisseur d'objets à la source de l'objet en tant que Stream ; toutefois, ReplaceData requiert que vous sérialisiez vous-même l'objet en Stream.Data is always sent from the Object Provider to the Object Source as a Stream, but ReplaceData requires that you serialize the object into a Stream yourself.

ReplaceObject accepte un objet que vous fournissez, le sérialise en Stream, puis appelle ReplaceData pour envoyer Stream vers CreateReplacementObject.ReplaceObject takes an object that you provide, serializes it into a Stream, then calls ReplaceData to send the Stream to CreateReplacementObject.

L'utilisation de l'une des méthodes Replace entraîne la création d'un objet de données dans le programme débogué, qui remplace l'objet visualisé.Using one of the Replace methods creates a new data object in the debuggee that replaces the object being visualized. Si vous souhaitez modifier le contenu de l'objet d'origine sans le remplacer, utilisez l'une des méthodes Transfer figurant dans le tableau ci-après.If you want to change the contents of the original object without replacing it, use one of the Transfer methods shown in the following table. Ces API transfèrent les données dans les deux sens et en même temps, sans remplacer l'objet visualisé :These APIs transfer data in both directions at the same time, without replacing the object that is being visualized:

Fournisseur d'objetsObject Provider Source de l'objetObject Source
TransferData

- ou -—or—

TransferObject
TransferData

Voir aussiSee Also

Comment : écrire un visualiseur How to: Write a Visualizer
Procédure pas à pas : Écriture d’un visualiseur en c# Walkthrough: Writing a Visualizer in C#
Procédure pas à pas : Écriture d’un visualiseur en Visual Basic Walkthrough: Writing a Visualizer in Visual Basic
Procédure pas à pas : Écriture d’un visualiseur en Visual Basic Walkthrough: Writing a Visualizer in Visual Basic
Considérations sur la sécurité du visualiseurVisualizer Security Considerations