Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’architecture d’un visualiseur de débogueur comporte deux parties :
Le côté débogueur s’exécute dans le débogueur Visual Studio. Le code côté débogueur crée et affiche l’interface utilisateur de votre visualiseur.
Le côté débogage s’exécute dans le processus que Visual Studio débogue (le débogueur).
Un visualiseur est un composant de débogueur qui permet au débogueur d’afficher (visualiser) le contenu d’un objet de données dans un formulaire explicite et compréhensible. Certains visualiseurs prennent également en charge la modification de l’objet de données. En écrivant des visualiseurs personnalisés, vous pouvez étendre le débogueur pour gérer vos propres types de données personnalisés.
L’objet de données à visualiser réside dans le processus que vous déboguez (processus de débogage ). L’interface utilisateur qui affiche les données est créée dans le processus du débogueur Visual Studio :
| Processus de débogueur | Processus de débogage |
|---|---|
| Interface utilisateur du débogueur (DataTips, Fenêtre Espion, QuickWatch) | Objet de données à visualiser |
Pour visualiser l’objet de données dans l’interface du débogueur, vous avez besoin de code pour communiquer entre les deux processus. Par conséquent, l’architecture du visualiseur se compose de deux parties : le code côté débogueur et le code côté débogage .
Le code côté débogueur crée sa propre interface utilisateur, qui peut être appelée à partir de l’interface du débogueur, telle qu'un DataTip, une fenêtre Espion, ou QuickWatch. L’interface du visualiseur est créée à l’aide de la DialogDebuggerVisualizer classe et de l’interface IDialogVisualizerService . Comme toutes les API visualiseur, DialogDebuggerVisualizer et IDialogVisualizerService se trouvent dans l’espace Microsoft.VisualStudio.DebuggerVisualizers de noms.
| Côté Débogueur | Côté Debuggee |
|---|---|
| Classe DialogDebuggerVisualizer IDialogVisualizerService, interface |
Objet de données |
L’interface utilisateur obtient les données à visualiser à partir d’un Fournisseur d’Objets, qui existe du côté du Débogueur :
| Côté débogueur | Côté du Debuggé |
|---|---|
| Classe DialogDebuggerVisualizer IDialogVisualizerService Interface |
Objet de données |
| Fournisseur d’objets (implémente IVisualizerObjectProvider) |
Il existe un objet correspondant côté débogage appelé Object Source :
| Débogueur côté | Côté débogué |
|---|---|
| Classe DialogDebuggerVisualizer IDialogVisualizerService, interface |
Objet de données |
| Fournisseur d’objets (implémente IVisualizerObjectProvider) | Source d’objet (dérivée de VisualizerObjectSource) |
Le fournisseur d’objets fournit les données d’objet à visualiser dans l’interface utilisateur du visualiseur. Le fournisseur d’objets obtient les données d’objet de la source d’objet. Le Fournisseur d'Objets et la Source d'Objets fournissent des API pour communiquer les données d'objet entre le côté débogueur et le côté de l'application déboguée.
Chaque visualiseur doit obtenir l’objet de données à visualiser. Le tableau suivant présente les API correspondantes que le fournisseur d’objets et la source d’objet utilisent à cet effet :
| Fournisseur d’objets | Source de l’objet |
|---|---|
| GetData — ou — GetObject |
GetData |
Notez que le fournisseur d'objets peut utiliser soit GetData, soit GetObject. L’une ou l’autre API entraîne un appel à GetData la source de l’objet. Un appel à Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData remplit un System.IO.Stream, qui représente une forme sérialisée de l’objet en cours de visualisation.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject désérialise les données dans la forme d'un objet, que vous pouvez ensuite afficher dans l'interface utilisateur que vous créez avec DialogDebuggerVisualizer.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData remplit les données en tant que données brutes Stream, que vous devez désérialiser vous-même.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject fonctionne en appelant Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData pour obtenir la version sérialisée de Stream, puis en désérialisant les données. Utilisez Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData quand l’objet n’est pas sérialisable par .NET et nécessite une sérialisation personnalisée. Dans ce cas, vous devez également remplacer la Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize méthode.
Si vous créez un visualiseur en lecture seule, une communication unidirectionnelle avec GetData ou GetObject est suffisante. Si vous créez un visualiseur qui prend en charge la modification d’objets de données, vous devez faire plus. Vous devez également être en mesure d'envoyer un objet de données du fournisseur d'objets à la source de l'objet. Le tableau suivant présente les API de fournisseur d’objets et de source d’objet utilisées à cet effet :
| Fournisseur d’objets | Source de l’objet |
|---|---|
| ReplaceData — ou — ReplaceObject |
CreateReplacementObject |
Notez, là encore, qu’il existe deux API que le fournisseur d’objets peut utiliser. Les données sont toujours envoyées du fournisseur d’objets à la source d'objet sous forme de Stream, mais ReplaceData, vous devez sérialiser l’objet dans un format Stream vous-même.
ReplaceObject prend un objet que vous fournissez, le sérialise dans un Stream, puis appelle ReplaceData pour envoyer le Stream à CreateReplacementObject.
L’utilisation de l’une des méthodes Replace crée un objet de données dans le débogueur qui remplace l’objet en cours de visualisation. Si vous souhaitez modifier le contenu de l’objet d’origine sans le remplacer, utilisez l’une des méthodes Transfer indiquées dans le tableau suivant. Ces API transfèrent des données dans les deux sens en même temps, sans remplacer l’objet en cours de visualisation :
| Fournisseur d’objets | Source de l’objet |
|---|---|
| TransferData — ou — TransferObject |
TransferData |