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

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

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

Вспомогательные визуализаторы типов

Существует ряд интерфейсов, которые 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 него, инкапсулируются в интерфейсе IEEData служба хранилища. Этот интерфейс представляет массив байтов и реализуется 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 .