Пример реализации локальных переменных
Важно!
В Visual Studio 2015 такая реализация вычислителя выражений была сделана нерекомендуемой. Сведения о реализации вычислителей выражений в среде CLR см. на страницах CLR expression evaluators (Вычислители выражений CLR) и Managed expression evaluator sample (Пример управляемого вычислителя выражений).
Ниже приведен обзор того, каким образом Visual Studio получает для метода локальные переменные от вычислителя выражений.
Visual Studio вызывает метод модуля отладки GetDebugProperty и получает объект IDebugProperty2, который представляет все свойства кадра стека, в том числе локальные переменные.
IDebugStackFrame2::GetDebugProperty
вызывает метод GetMethodProperty и получает объект, описывающий метод, в котором сработала точка останова. Модуль отладки предоставляет поставщик символов (IDebugSymbolProvider), адрес (IDebugAddress) и модуль привязки (IDebugBinder).IDebugExpressionEvaluator::GetMethodProperty
вызывает GetContainerField и предоставляет объектIDebugAddress
, чтобы получить интерфейс IDebugContainerField, который представляет метод, содержащий указанный адрес.Интерфейс
IDebugContainerField
запрашивается для получения интерфейса IDebugMethodField, который и предоставляет доступ к локальным переменным анализируемого метода.IDebugExpressionEvaluator::GetMethodProperty
создает экземпляр класса (называемого в примереCFieldProperty
), который использует интерфейсIDebugProperty2
для представления локальных переменных метода. ОбъектIDebugMethodField
помещается в объектCFieldProperty
вместе с объектамиIDebugSymbolProvider
,IDebugAddress
иIDebugBinder
.После инициализации объекта
CFieldProperty
вызывается метод GetInfo для объектаIDebugMethodField
, чтобы получить структуру FIELD_INFO, содержащую все доступные для отображения сведения непосредственно о методе.IDebugExpressionEvaluator::GetMethodProperty
возвращает объектCFieldProperty
в виде объектаIDebugProperty2
.Visual Studio вызывает для возвращенного объекта
IDebugProperty2
метод EnumChildren с фильтромguidFilterLocalsPlusArgs
, который возвращает объект IEnumDebugPropertyInfo2, содержащий локальные переменные метода. Это перечисление заполняется вызовами EnumLocals и EnumArguments.Visual Studio вызывает метод Next, чтобы получить структуру DEBUG_PROPERTY_INFO для каждой локальной переменной. Эта структура содержит для локальной переменной указатель на интерфейс
IDebugProperty2
.Visual Studio вызывает для каждой локальной переменной метод GetPropertyInfo и получает ее имя, значение и тип. Эти сведения отображаются в окне Локальные переменные.
В этом разделе
Реализация GetMethodProperty — описывает реализацию метода GetMethodProperty.
Перечисление локальных переменных — описывает, как модуль отладки совершает вызов для перечисления локальных переменных или аргументов.
Получение свойств локальных элементов — описывает, как модуль отладки совершает вызов для получения имени, типа и значений локальных переменных.
Получение значений локальных переменных — описывает получение значения локальной переменной с помощью объекта модуля привязки, предоставляемого контекстом вычислений.
Вычисление локальных переменных — поясняет принципы вычисления локальных переменных.
См. также
Контекст вычислений — указывает аргументы, передаваемые при вызове вычислителя выражений из модуля отладки.
Пример для MyCEE — демонстрирует один из подходов к реализации создания вычислителя выражений на языке MyC.