Esta documentación está archivada y no tiene mantenimiento.

Cómo: Escribir un visualizador

Este tema hace referencia a:

Edición de Visual Studio

Visual Basic

C#

C++

J#

Express

Sólo administrado

Estándar

Sólo administrado

Pro/Team

Sólo administrado

Puede escribir un visualizador personalizado para un objeto de cualquier clase administrada, excepto Object o Array.

La arquitectura de un visualizador del depurador tiene dos partes:

  • El lado depurador se ejecuta dentro del depurador de Visual Studio. El código del lado depurador crea y muestra la interfaz de usuario para el visualizador.

  • El lado depurado se ejecuta dentro del proceso que Visual Studio depura (el depurado).

El objeto de datos que desea visualizar (un objeto String, por ejemplo) existe en el proceso depurado. Por lo tanto, el lado depurado tiene que enviar el objeto de datos al lado depurador, que después puede mostrarlo mediante la interfaz de usuario creada.

El lado depurador recibe este objeto de datos que se visualizará desde un proveedor de objeto que implementa la interfaz IVisualizerObjectProvider. El lado depurado envía el objeto de datos a través del origen de objeto, el cual se deriva de VisualizerObjectSource. El proveedor de objetos también puede devolver los datos al origen de objetos. Esto le permitirá escribir un visualizador que edite y muestre datos. El proveedor de objetos puede ser reemplazado para comunicarse con el evaluador de expresiones y, por consiguiente, con el origen del objeto.

El lado depurado y el lado depurador se comunican entre sí a través de Stream. Se proporcionan métodos para serializar un objeto de datos en Stream y deserializar Stream en un objeto de datos.

El código del lado depurado se especifica mediante el atributo DebuggerVisualizer (DebuggerVisualizerAttribute).

Para crear la interfaz de usuario del visualizador en el lado depurador, es necesario crear una clase que herede de DialogDebuggerVisualizer y reemplazar el método Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show(Microsoft.VisualStudio.DebuggerVisualizers.IDialogVisualizerService,Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider) para mostrar la interfaz.

Puede utilizar IDialogVisualizerService para mostrar formularios Windows Forms, cuadros de diálogo y controles desde el visualizador.

La compatibilidad con los tipos genéricos es limitada. Puede escribir un visualizador para un destino que sólo es un tipo genérico si el tipo genérico es un tipo abierto. Esta restricción es igual que la restricción de uso del atributo DebuggerTypeProxy. Para obtener información detallada, vea Utilizar el atributo DebuggerTypeProxy.

Los visualizadores personalizados pueden tener consideraciones de seguridad. Vea Consideraciones de seguridad del visualizador.

Para obtener una descripción de la arquitectura del visualizador, vea Arquitectura de un visualizador.

Los siguientes procedimientos proporcionan una visión de alto nivel de los pasos necesarios para crear un visualizador. Para una explicación más detallada, vea Tutorial: Escribir un visualizador en C#.

Para crear el lado depurador

  1. Utilice los métodos IVisualizerObjectProvider para obtener el objeto visualizado en el lado depurador.

  2. Cree una clase que herede de DialogDebuggerVisualizer.

  3. Reemplace el método Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer.Show(Microsoft.VisualStudio.DebuggerVisualizers.IDialogVisualizerService,Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider) para mostrar su interfaz. Utilice los métodos IDialogVisualizerService para mostrar formularios Windows Forms, cuadros de diálogo y controles como parte de la interfaz.

  4. Aplique DebuggerVisualizerAttribute, dándole un visualizador (DialogDebuggerVisualizer).

Para crear el lado depurado

  1. Aplique DebuggerVisualizerAttribute, dándole un visualizador (DialogDebuggerVisualizer) y un origen de objeto (VisualizerObjectSource). Si omite el origen del objeto, se utilizará un origen de objeto predeterminado.

  2. Si desea que el visualizador pueda editar y mostrar objetos de datos, será necesario reemplazar los métodos TransferData o CreateReplacementObject de VisualizerObjectSource.

Vea también

Mostrar: