Архитектура визуализатора
Обновлен: Ноябрь 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. Любой 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 поставщика и источника объектов, используемые для этой цели:
Поставщик объектов |
Источник объектов |
---|---|
либо |
Обратите внимание, что поставщик объектов может использовать два API. Данные всегда посылаются от поставщика объектов источнику как [System.IO.Stream], но метод ReplaceData требует отдельной сериализации объекта в [System.IO.Stream].
Метод ReplaceObject принимает объект, сериализует его в [System.IO.Stream], затем вызывает метод ReplaceData для отправки [System.IO.Stream] в CreateReplacementObject.
С помощью одного из методов Replace создается новый объект данных в отлаживаемом коде, который заменяет объект визуализации. Если надо изменить содержимое исходного объекта без его замены, воспользуйтесь одним из методов Transfer, показанных в следующей таблице. Эти API передают данные в обоих направлениях одновременно, без замены визуализируемого объекта:
Поставщик объектов |
Источник объектов |
---|---|
либо |
См. также
Задачи
Практическое руководство. Написание визуализатора
Пошаговое руководство. Написание визуализатора на C#
Пошаговое руководство. Написание визуализатора на Visual Basic
Пошаговое руководство. Написание визуализатора на Visual Basic
Основные понятия
Вопросы безопасности визуализатора