Визуализация и просмотр данных
Применимо к: Visual Studio Visual Studio
для Mac
Visual 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 .