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


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

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

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

  • Сторона отладчика выполняется в процессе отладки Visual Studio (отладчик).

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

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

Процесс отладчика Процесс отладки
Пользовательский интерфейс отладчика (подсказки данных, окно «Watch Window», QuickWatch) Объект данных для визуализации

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

Код на стороне отладчика создает собственный пользовательский интерфейс, который можно вызвать из интерфейса отладчика, например, DataTip, окна 'Просмотра' или QuickWatch. Интерфейс визуализатора создается с помощью 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 на источнике объекта. Вызов Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.GetData заполняет System.IO.Stream, представляющий сериализованную форму визуализируемого объекта.

Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject десериализует данные обратно в объектную форму, которую затем можно отобразить в пользовательском интерфейсе, создаваемом с помощью DialogDebuggerVisualizer. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData заполняет данные в виде необработанных данных Stream, которые необходимо десериализировать вручную. Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetObject работает, вызывая Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData, чтобы получить сериализованный Stream, и затем десериализуя данные. Используйте Microsoft.VisualStudio.DebuggerVisualizers.IVisualizerObjectProvider.GetData, если объект не может быть сериализован .NET и требует настраиваемой сериализации. В этом случае необходимо также переопределить метод Microsoft.VisualStudio.DebuggerVisualizers.VisualizerObjectSource.Serialize.

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

Поставщик объектов Источник объекта
ReplaceData

—или—

ReplaceObject
CreateReplacementObject

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

ReplaceObject принимает предоставленный объект, сериализует его в Stream, а затем вызывает ReplaceData, чтобы отправить Stream к CreateReplacementObject.

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

Поставщик объектов Источник объекта
TransferData

—или—

TransferObject
TransferData