Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A arquitetura de um visualizador para depurador consiste em duas partes:
O lado do depurador é executado dentro do depurador do Visual Studio. O código do lado do depurador cria e exibe a interface de utilizador para o visualizador.
A parte do debuggee é executada dentro do processo que o Visual Studio está a depurar (o debuggee).
Um visualizador é um componente do depurador que permite que o depurador exiba (visualize) o conteúdo de um objeto de dados de forma significativa e compreensível. Alguns visualizadores também suportam a edição do objeto de dados. Ao escrever 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 que você está depurando (o processo de depuração ). A interface do usuário que exibirá os dados é criada dentro do processo do depurador do Visual Studio:
| Processo do depurador | Processo de depuração |
|---|---|
| Interface de usuário do depurador (DataTips, Watch Window, QuickWatch) | Objeto de dados a ser visualizado |
Para visualizar o objeto de dados na interface do depurador, você precisa de código para se comunicar entre os dois processos. Consequentemente, a arquitetura do visualizador consiste em duas partes: código do lado do depurador e código do lado do depurador .
O código do lado do depurador cria sua própria interface de usuário, que pode ser invocada a partir da interface do depurador, como DataTip, Watch Window ou QuickWatch. A interface do visualizador é criada usando a DialogDebuggerVisualizer classe e a IDialogVisualizerService interface. Como todas as APIs do Visualizer, DialogDebuggerVisualizer e IDialogVisualizerService são encontrados no Microsoft.VisualStudio.DebuggerVisualizers namespace.
| Lado do depurador | Lado Debuggee |
|---|---|
| DialogDebuggerVisualizer Classe IDialogVisualizerService Interface |
Objeto de Dados |
A interface do usuário obtém os dados a serem visualizados de um provedor de objetos, que existe no lado do depurador:
| Lado do depurador | Lado do Debuggeado |
|---|---|
| DialogDebuggerVisualizer Classe IDialogVisualizerService Interface |
Objeto de Dados |
| Provedor de objetos (implementa IVisualizerObjectProvider) |
Há um objeto correspondente no lado do depurador chamado Object Source:
| Lado do depurador | Lado Debuggee |
|---|---|
| DialogDebuggerVisualizer Classe IDialogVisualizerService Interface |
Objeto de Dados |
| Provedor de objetos (implementa IVisualizerObjectProvider) | Fonte do objeto (derivada de VisualizerObjectSource) |
O Provedor de Objetos fornece os dados do objeto que devem ser visualizados para a interface do usuário do visualizador. O Provedor de Objeto obtém os dados do objeto da Fonte do Objeto. O Provedor de Objetos e a Fonte de Objetos fornecem APIs para comunicar dados de objetos entre o lado do depurador e o lado a ser depurado.
Cada visualizador deve obter o objeto de dados a ser visualizado. A tabela a seguir mostra as APIs correspondentes que o Provedor de Objeto e a Fonte do Objeto usam para essa finalidade:
| Provedor de objetos | Origem do objeto |
|---|---|
| GetData —ou— GetObject |
GetData |
Observe que o provedor de objetos pode usar um GetData ou GetObject. Qualquer API resulta em uma chamada para GetData no Object Source. Uma chamada para Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData preenche um System.IO.Stream, que representa a forma serializada do objeto a ser visualizado.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject desserializa os dados de volta para a forma de objeto, que pode ser exibida na interface de utilizador criada com DialogDebuggerVisualizer.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData preenche os dados como um raw Stream, que você mesmo deve desserializar.
Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject funciona chamando Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData para obter o Stream serializado e, em seguida, desserializando os dados. Use Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData quando o objeto não é serializável pelo .NET e requer serialização personalizada. Nesse caso, você também deve substituir o Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize método.
Se estiver a criar um visualizador somente leitura, a comunicação num só sentido com GetData ou GetObject é suficiente. Se você estiver criando um visualizador que ofereça suporte à edição de objetos de dados, deverá fazer mais. Você deve ser capaz de enviar um objeto de dados do Provedor de Objetos de volta para a Fonte do Objeto também. A tabela a seguir mostra as APIs do Provedor de Objetos e da Fonte de Objeto usadas para essa finalidade:
| Provedor de objetos | Origem do objeto |
|---|---|
| ReplaceData —ou— ReplaceObject |
CreateReplacementObject |
Observe, novamente, que há duas APIs que o Provedor de Objetos pode usar. Os dados são sempre enviados do Provedor de Objetos para a Fonte de Objetos como um Stream, mas ReplaceData requer que o objeto seja serializado por você em um Stream.
ReplaceObject pega um objeto que você fornece, serializa-o em um Streame, em seguida, chama ReplaceData para enviar o Stream para CreateReplacementObject.
O uso de um dos métodos Replace cria um novo objeto de dados no depurador que substitui o objeto que está sendo visualizado. Se desejar alterar o conteúdo do objeto original sem substituí-lo, use um dos métodos Transfer mostrados na tabela a seguir. Essas APIs transferem dados em ambas as direções ao mesmo tempo, sem substituir o objeto que está sendo visualizado:
| Provedor de objetos | Origem do objeto |
|---|---|
| TransferData —ou— TransferObject |
TransferData |