Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Архитектура визуализатора отладчика состоит из двух частей:
Сторона отладчика выполняется в отладчике 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 |