Поделиться через


Архитектура визуализатора

Обновлен: Ноябрь 2007

Этот раздел применим к:

Выпуск

Visual Basic

C#

C++

Web Developer

Express

Тема применяется Тема применяется

Только управляемый код

Тема применяется

Standard

Тема применяется Тема применяется

Только управляемый код

Тема применяется

Pro и Team

Тема применяется Тема применяется

Только управляемый код

Тема применяется

Обозначения:

Тема применяется

Применяется

Тема не применяется

Не применяется

Тема применяется, но команда по умолчанию сокрыта

Команда или команды скрыты по умолчанию.

Архитектура визуализатора отладчика состоит из двух частей:

  • Сторона отладчика — запускается в отладчике Visual Studio. Код стороны отладчика создаёт и отображает интерфейс пользователя для визуализатора.

  • Сторона отлаживаемого кода — выполняется внутри процесса, который отлаживается Visual Studio ( отлаживаемая программа).

Визуализатор является компонентом отладчика, который позволяет отладчику отображать (визуализировать) содержимое объекта данных в удобочитаемом, понятном виде. Некоторые визуализаторы поддерживают также редактирование объекта данных. Путем написания пользовательских визуализаторов можно расширить возможности отладчика для обработки пользовательских типов данных.

Объект данных, который будет отображен, находится в пределах процесса отладки (отлаживаемый процесс). Пользовательский интерфейс, который будет отображать данные, создается в пределах процесса отладчика Visual Studio:

Процесс отладчика

Отлаживаемый процесс

Пользовательский интерфейс отладчика (подсказки, окно "Контрольное значение", окно "Быстрая проверка")

Объект данных для отображения

Для визуализации объекта данных в пределах интерфейса отладчика требуется код для обмена данными между двумя процессами. Таким образом, архитектура визуализатора состоит из двух компонентов: кода стороны отладчика и кода отлаживаемой стороны.

Код стороны отладчика создает свой собственный интерфейс пользователя, к которому может обращаться интерфейс отладчика, например, окно подсказки, окно контрольного значения или окно быстрой проверки. Интерфейс визуализатора создан с помощью класса DialogDebuggerVisualizer и интерфейса IDialogVisualizerService. Как все API визуализатора, DialogDebuggerVisualizer и IDialogVisualizerService находятся в пространстве имен Microsoft.VisualStudio.DebuggerVisualizers.

Сторона отладчика

Сторона отлаживаемого кода

Класс DialogDebuggerVisualizer

Интерфейс IDialogVisualizerService

Объект данных

Пользовательский интерфейс получает данные для отображения от поставщика объектов, который существует на стороне отладчика:

Сторона отладчика

Сторона отлаживаемого кода

Класс DialogDebuggerVisualizer

Интерфейс IDialogVisualizerService

Объект данных

Поставщик объектов (реализует IVisualizerObjectProvider)

Существует соответствующий объект на стороне отлаживаемого кода — источник объектов:

Сторона отладчика

Сторона отлаживаемого кода

Класс DialogDebuggerVisualizer

Интерфейс IDialogVisualizerService

Объект данных

Поставщик объектов (реализует IVisualizerObjectProvider)

Источник объектов (производный от VisualizerObjectSource)

Поставщик объектов предоставляет объект данных для отображения в пользовательском интерфейсе визуализатора. Поставщик объектов получает объект данных от источника объектов. Поставщик объектов и источник объектов предоставляют API для обмена данными объекта между сторонами отладчика и отлаживаемого кода.

Каждый визуализатор должен получить объект данных для отображения. В следующей таблице показаны соответствующие API, которые поставщик объектов и источник объектов используют для этой цели:

Поставщик объектов

Источник объектов

GetData

либо

GetObject

GetData

Обратите внимание, что поставщик объектов может использовать как GetData, так и GetObject. Любой API приводит к вызову GetData для источника объектов. Вызов VisualizerObjectSource.GetData заполняет [System.IO.Stream], который представляет сериализованную форму визуализируемого объекта.

Метод IVisualizerObjectProvider.GetObject десериализует данные обратно в форму объекта, которую затем можно отобразить в пользовательском интерфейсе с помощью DialogDebuggerVisualizer. Метод IVisualizerObjectProvider.GetData возвращает данные как необработанный [System.IO.Stream], который необходимо десериализовать отдельно. Метод IVisualizerObjectProvider.GetObject работает путем вызова метода IVisualizerObjectProvider.GetData для получения сериализации в [System.IO.Stream], а затем десериализации данных из него. Используйте IVisualizerObjectProvider.GetData, когда объект не является сериализуемым средствами .NET и требует пользовательской сериализации. В этом случае необходимо также переопределить метод VisualizerObjectSource.Serialize. Подробное рассмотрение того, что может быть сериализовано, см. в разделе Serialization.

Если нужен визуализатор только для чтения, достаточно односторонней связи с помощью GetData или GetObject. Если вы создаете визуализатор с поддержкой редактирования объектов данных, необходимо сделать больше. Необходимо иметь также возможность для отправки объекта данных от поставщика объектов обратно источнику. В следующей таблице показаны API поставщика и источника объектов, используемые для этой цели:

Поставщик объектов

Источник объектов

ReplaceData

либо

ReplaceObject

CreateReplacementObject

Обратите внимание, что поставщик объектов может использовать два API. Данные всегда посылаются от поставщика объектов источнику как [System.IO.Stream], но метод ReplaceData требует отдельной сериализации объекта в [System.IO.Stream].

Метод ReplaceObject принимает объект, сериализует его в [System.IO.Stream], затем вызывает метод ReplaceData для отправки [System.IO.Stream] в CreateReplacementObject.

С помощью одного из методов Replace создается новый объект данных в отлаживаемом коде, который заменяет объект визуализации. Если надо изменить содержимое исходного объекта без его замены, воспользуйтесь одним из методов Transfer, показанных в следующей таблице. Эти API передают данные в обоих направлениях одновременно, без замены визуализируемого объекта:

Поставщик объектов

Источник объектов

TransferData

либо

TransferObject

TransferData

См. также

Задачи

Практическое руководство. Написание визуализатора

Пошаговое руководство. Написание визуализатора на C#

Пошаговое руководство. Написание визуализатора на Visual Basic

Пошаговое руководство. Написание визуализатора на Visual Basic

Основные понятия

Вопросы безопасности визуализатора

Другие ресурсы

Написание визуализатора с расширенными возможностями