Partilhar via


Arquitetura de visualizador

Este tópico se aplica a:

Edição

Visual Basic

C#

C++

Desenvolvedores Web

Express

Somente Gerenciador

Padrão

Somente Gerenciador

PRO e equipe

Somente Gerenciador

Legenda de tabela:

Aplica-se

Não é aplicada

Comando ou comandos oculta por padrão.

A arquitetura de um visualizador do elemento a ser depurado tem duas partes:

  • O debugger side executa com o depurador do Visual Studio.O código do debugger-side cria e exibe a interface do usuário para seu visualizador.

  • O debugger side executa com o processo do Visual Studio que está depurando (o debuggee).

Um visualizador é um componente do depurador que permite que o depurador exibir (Visualizar) o Sumário de um objeto de dados em um formulário significativo e compreensível.Alguns visualizadores suporte à edição do objeto de dados também.Escrevendo visualizadores personalizados, você pode estender o depurador para lidar com seus próprios tipos de dados personalizados.

O objeto de dados a ser visualizado reside dentro do processo você está depurando (o ser depurado processo).A interface do usuário que irá exibir os dados é criada dentro do processo de depurador do Visual Studio:

Depurador de processos

Processo de depuração

Interface do usuário (DataTips, a janela Inspeção QuickWatch) do depurador

Objeto de dados a ser visualizado

Para visualizar o objeto de dados dentro da interface do depurador, você precisa de código para a comunicação entre os dois processos.Conseqüentemente, a arquitetura do visualizador consiste em duas partes: lado do depurador code and debuggee side código.

O código do debugger-side cria sua própria interface de usuário, que pode ser chamada da interface do depurador, sistema autônomo um DataTip, a janela Inspeção ou QuickWatch.A interface do visualizador é criada usando o DialogDebuggerVisualizer classe e o IDialogVisualizerService interface. Como todas as APIs visualizador, DialogDebuggerVisualizer e IDialogVisualizerService são encontrados no Microsoft.VisualStudio.DebuggerVisualizers espaço para nome.

No lado do depurador

Debuggee side

Classe DialogDebuggerVisualizer

Interface IDialogVisualizerService

Objeto de dados

A interface do usuário obtém os dados a ser visualizado de um provedor de objeto, que existe no lado do depurador:

No lado do depurador

Debuggee side

Classe DialogDebuggerVisualizer

Interface IDialogVisualizerService

Objeto de dados

Objeto provedor (implementa IVisualizerObjectProvider)

Há um objeto correspondente no lado do debuggee side chamado a fonte de objeto:

No lado do depurador

Debuggee side

Classe DialogDebuggerVisualizer

Interface IDialogVisualizerService

Objeto de dados

Objeto provedor (implementa IVisualizerObjectProvider)

Fonte do objeto (derivado de VisualizerObjectSource)

O provedor de objeto fornece os dados de objeto a ser visualizado para o visualizador da interface do usuário.O provedor do objeto obtém os dados de objeto da fonte do objeto.O provedor do objeto e fonte de objeto fornecem APIs para comunicar dados entre o lado do depurador e o lado debugee do objeto.

Cada visualizador tem que fazer com que o objeto de dados a ser visualizado.A tabela a seguir mostra as APIs correspondentes o provedor do objeto e fonte de objeto usam para essa finalidade:

Objeto provedor

Objeto de fonte

GetData

- ou -

GetObject

GetData

Observe que o objeto provedor pode usar qualquer um dos GetData ou GetObject. Qualquer API resultados em uma telefonar para GetData na fonte de objeto. Uma telefonar para VisualizerObjectSource.GetData preenche uma [System.IO.Stream], que representa um formulário serializado do objeto que está sendo visualizado.

IVisualizerObjectProvider.GetObject desserializa os dados no objeto de formulário, que você pode exibir na interface do usuário que você criar com DialogDebuggerVisualizer. IVisualizerObjectProvider.GetData preenche sistema autônomo dados sistema autônomo um bruto [System.IO.Stream], que deve desserializar você mesmo. IVisualizerObjectProvider.GetObject funciona chamando IVisualizerObjectProvider.GetData Para obter o serializado [System.IO.Stream], então ao desserializar os dados. Use IVisualizerObjectProvider.GetData Quando o objeto não é serializável pelo .NET e requer serialização personalizada. Nesse caso, você também deverá substituir o VisualizerObjectSource.Serialize método. Para obter uma abordagem completa do que pode ser serializado, consulte Série.

Se você estiver criando um visualizador somente leitura, comunicação unidirecional com GetData ou GetObject é suficiente. Se você estiver criando um Visualizador oferece suporte a edição de objetos de dados, você deve fazer muito mais.Você deve poder enviar um objeto de dados do provedor objeto volta para a fonte do objeto também.A tabela a seguir mostra o objeto provedor e Object fonte APIs usadas para essa finalidade:

Objeto provedor

Objeto de fonte

ReplaceData

- ou -

ReplaceObject

CreateReplacementObject

Observe, novamente, há duas APIs que pode usar o provedor do objeto.Dados são sempre enviados do provedor objeto à fonte de objeto sistema autônomo um [System.IO.Stream], mas ReplaceData requer que você serializar o objeto em um [System.IO.Stream] Você mesmo.

ReplaceObject obtém um objeto que você fornecer, serializa-la em um [System.IO.Stream], em seguida, chama ReplaceData para enviar o [System.IO.Stream] para CreateReplacementObject.

Usando um dos métodos substituir cria um novo objeto de dados no debuggee que substitui o objeto sendo visualizado.Se você desejar alterar o Sumário do objeto original sem substituí-lo, use um dos métodos de transferência mostrados na tabela a seguir.Essas APIs transferência dados em ambas as direções ao mesmo time, sem substituir o objeto que está sendo visualizado:

Objeto provedor

Objeto de fonte

TransferData

- ou -

TransferObject

TransferData

Consulte também

Tarefas

Como: Gravar um visualizador

Demonstra Passo a passo: Escrever um visualizador em translation from VPE for Csharp

Demonstra Passo a passo: Escrever um visualizador no Visual Basic

Demonstra Passo a passo: Escrever um visualizador no Visual Basic

Conceitos

Considerações sobre segurança do Visualizador

Outros recursos

Gravar um Visualizador Avançado