Практическое руководство. Написание визуализатора
Этот раздел применим к:
Выпуск |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Только управляемый код |
||||
Pro, Premium и Ultimate |
Только управляемый код |
Пользовательский визуализатор можно создать для объекта любого управляемого класса, за исключением Object и Array.
Архитектура визуализатора отладчика состоит из двух частей:
Сторона отладчика – код, который запускается в отладчике Visual Studio. Код со стороны отладчика создает и отображает пользовательский интерфейс визуализатора.
Сторона отлаживаемого кода – код, который выполняется внутри процесса, отлаживаемого в Visual Studio ( отлаживаемая программа).
Объекты данных, которые требуется визуализировать (например, строковые объекты), принадлежат отлаживаемому процессу. Таким образом, отлаживаемая сторона должна передать объект данных стороне отладчика, которая затем может вывести эти данные с помощью созданного пользовательского интерфейса.
Сторона отладчика получает объект данных для визуализации от поставщика объекта. В поставщике объекта реализуется интерфейс IVisualizerObjectProvider. Отлаживаемая сторона передает объект данных через источник объекта, который является производным от VisualizerObjectSource. Поставщик объектов может также отправлять данные обратно к источнику объекта, что позволяет создавать визуализаторы, которые помимо отображения могут также изменять данные. Поставщик объектов может быть переопределен, чтобы контактировать с вычислителем выражений и, следовательно, с источником объектов.
Отлаживаемая и отладочная стороны взаимодействуют друг с другом через Stream. Предоставляются методы для сериализации объекта данных в Stream и десериализации Stream обратно в объект данных.
Код отлаживаемой стороны обуславливается с помощью атрибута DebuggerVisualizer (DebuggerVisualizerAttribute).
Чтобы создать пользовательский интерфейс визуализатора на стороне отладчика, необходимо создать класс, который наследует DialogDebuggerVisualizer и переопределить метод DialogDebuggerVisualizer.Show для отображения интерфейса.
Можно использовать IDialogVisualizerService для отображения форм Windows, диалоговых окон и элементов управления из визуализатора.
Поддержка универсальных типов ограничена. Можно написать визуализатор для целевого универсального типа, только если он является открытым. Ограничения накладываются те же, что и при использовании атрибута DebuggerTypeProxy. Дополнительные сведения см. в разделе Использование атрибута DebuggerTypeProxy.
При работе с пользовательскими визуализаторами следует учитывать вопросы безопасности. См. раздел Вопросы безопасности визуализатора.
Процедуры, приведенные ниже, дают подробное описание, что необходимо сделать для создания визуализатора. Подробности см. в разделе Пошаговое руководство. Написание визуализатора на C#.
Создание кода для отладочной стороны
Используйте методы IVisualizerObjectProvider для получения визуализированного объекта на стороне отладчика.
Создайте класс, который наследует от DialogDebuggerVisualizer.
Переопределите метод DialogDebuggerVisualizer.Show для отображения интерфейса. Используйте методы IDialogVisualizerService для отображения форм, диалоговых окон и элементов управления Windows как части интерфейса.
Используйте DebuggerVisualizerAttribute, предоставив ему визуализатор (DialogDebuggerVisualizer).
Создание кода для отлаживаемой стороны
Используйте DebuggerVisualizerAttribute, предоставив ему визуализатор (DialogDebuggerVisualizer) и источник объекта (VisualizerObjectSource). Если источник объекта не задан, будет использоваться источник объекта, заданный по умолчанию
Если необходимо, чтобы визуализатор редактировал объекты данных, помимо их отображения, то необходимо переопределить методы TransferData или CreateReplacementObject для VisualizerObjectSource.
См. также
Задачи
Практическое руководство. Установка визуализатора
Практическое руководство. Тестирование и отладка визуализатора
Основные понятия
Вопросы безопасности визуализатора