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