Визуализация и просмотр данных

Применимо к:yes Visual Studio Visual Studio noдля Mac noVisual Studio Code

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

Visual Studio определяет, сколько визуализаторов типов и пользовательских средств просмотра связаны с типом объекта путем вызова метода GetCustomViewerCount . Если доступен по крайней мере один визуализатор типа или пользовательское средство просмотра, Visual Studio вызывает метод GetCustomViewerList , чтобы получить список этих визуализаторов и зрителей (на самом деле список объектов, реализующих визуализаторы и средства просмотра) и представить их пользователю.

Поддержка визуализаторов типов

Существует ряд интерфейсов, которые EE должен реализовать для поддержки визуализаторов типов. Эти интерфейсы можно разбить на две широкие категории: интерфейсы, которые перечисляют визуализаторы типов и интерфейсы, обращаюющиеся к данным свойств.

Перечисление визуализаторов типов

EE поддерживает перечисление визуализаторов типов в реализации IDebugProperty3::GetCustomViewerCount и IDebugProperty3::GetCustomViewerList. Эти методы передают вызов соответствующим методам GetCustomViewerCount и GetCustomViewerList.

IEEVisualizerService получается путем вызова CreateVisualizerService. Для этого метода требуется интерфейс IDebugBinder3 , полученный из интерфейса IDebugBinder , переданного в EvaluateSync. IEEVisualizerServiceProvider::CreateVisualizerService также требуются интерфейсы IDebugSymbolProvider и IDebugAddress , которые были переданы IDebugParsedExpression::EvaluateSync. Последним интерфейсом, необходимым для создания IEEVisualizerService интерфейса, является интерфейс IEEVisualizerDataProvider , который реализует EE. Этот интерфейс позволяет вносить изменения в визуализируемые свойства. Все данные свойств инкапсулируются в интерфейс IDebugObject , который также реализуется EE.

Доступ к данным свойств

Доступ к данным свойств осуществляется через интерфейс IPropertyProxyEESide . Чтобы получить этот интерфейс, Visual Studio вызывает QueryInterface для объекта свойства, чтобы получить интерфейс IPropertyProxyProvider (реализован на том же объекте, который реализует интерфейс IDebugProperty3 ), а затем вызывает метод GetPropertyProxy для получения IPropertyProxyEESide интерфейса.

Все данные, передаваемые в интерфейс и из IPropertyProxyEESide него, инкапсулируются в интерфейс IEEDataStorage . Этот интерфейс представляет массив байтов и реализуется Visual Studio и EE. При изменении данных свойства Visual Studio создает IEEDataStorage объект, содержащий новые данные, и вызывает CreateReplacementObject с этим объектом данных, чтобы получить новый IEEDataStorage объект, который, в свою очередь, передается в InPlaceUpdateObject для обновления данных свойства. IPropertyProxyEESide::CreateReplacementObject позволяет EE создавать экземпляры собственного IEEDataStorage класса, реализующего интерфейс.

Поддержка пользовательских средств просмотра

DBG_ATTRIB_VALUE_CUSTOM_VIEWER Флаг задается в dwAttrib поле структуры DEBUG_PROPERTY_INFO (возвращается вызовом GetPropertyInfo), чтобы указать, что объект имеет пользовательское средство просмотра. Если этот флаг установлен, Visual Studio получает интерфейс IDebugProperty3 из интерфейса IDebugProperty2 с помощью QueryInterface.

Если пользователь выбирает пользовательское средство просмотра, Visual Studio создает экземпляр пользовательского средства просмотра с помощью средства просмотра CLSID , предоставленного IDebugProperty3::GetCustomViewerList методом. Затем Visual Studio вызывает DisplayValue для отображения значения пользователю.

Как правило, IDebugCustomViewer::DisplayValue представление данных только для чтения. Чтобы разрешить изменения данных, EE должен реализовать пользовательский интерфейс, поддерживающий изменение данных в объекте свойства. Этот IDebugCustomViewer::DisplayValue метод использует этот пользовательский интерфейс для поддержки изменения данных. Метод ищет пользовательский интерфейс в интерфейсе, IDebugProperty2 переданном в качестве аргумента pDebugProperty .

Поддержка визуализаторов типов и пользовательских средств просмотра

EE может поддерживать визуализаторы типов и пользовательские средства просмотра в методах GetCustomViewerCount и GetCustomViewerList . Во-первых, EE добавляет количество пользовательских зрителей, которые он предоставляет в значение, возвращаемое методом GetCustomViewerCount . Во-вторых, EE добавляет CLSIDсобственные пользовательские зрители в список, возвращаемый методом GetCustomViewerList .

См. также раздел