Поделиться через


Пример реализации локальных переменных

Важно!

В Visual Studio 2015 такая реализация вычислителя выражений была сделана нерекомендуемой. Сведения о реализации вычислителей выражений в среде CLR см. на страницах CLR expression evaluators (Вычислители выражений CLR) и Managed expression evaluator sample (Пример управляемого вычислителя выражений).

Ниже приведен обзор того, каким образом Visual Studio получает для метода локальные переменные от вычислителя выражений.

  1. Visual Studio вызывает метод модуля отладки GetDebugProperty и получает объект IDebugProperty2, который представляет все свойства кадра стека, в том числе локальные переменные.

  2. IDebugStackFrame2::GetDebugProperty вызывает метод GetMethodProperty и получает объект, описывающий метод, в котором сработала точка останова. Модуль отладки предоставляет поставщик символов (IDebugSymbolProvider), адрес (IDebugAddress) и модуль привязки (IDebugBinder).

  3. IDebugExpressionEvaluator::GetMethodProperty вызывает GetContainerField и предоставляет объект IDebugAddress, чтобы получить интерфейс IDebugContainerField, который представляет метод, содержащий указанный адрес.

  4. Интерфейс IDebugContainerField запрашивается для получения интерфейса IDebugMethodField, который и предоставляет доступ к локальным переменным анализируемого метода.

  5. IDebugExpressionEvaluator::GetMethodProperty создает экземпляр класса (называемого в примере CFieldProperty), который использует интерфейс IDebugProperty2 для представления локальных переменных метода. Объект IDebugMethodField помещается в объект CFieldProperty вместе с объектами IDebugSymbolProvider, IDebugAddress и IDebugBinder.

  6. После инициализации объекта CFieldProperty вызывается метод GetInfo для объекта IDebugMethodField, чтобы получить структуру FIELD_INFO, содержащую все доступные для отображения сведения непосредственно о методе.

  7. IDebugExpressionEvaluator::GetMethodProperty возвращает объект CFieldProperty в виде объекта IDebugProperty2.

  8. Visual Studio вызывает для возвращенного объекта IDebugProperty2 метод EnumChildren с фильтром guidFilterLocalsPlusArgs, который возвращает объект IEnumDebugPropertyInfo2, содержащий локальные переменные метода. Это перечисление заполняется вызовами EnumLocals и EnumArguments.

  9. Visual Studio вызывает метод Next, чтобы получить структуру DEBUG_PROPERTY_INFO для каждой локальной переменной. Эта структура содержит для локальной переменной указатель на интерфейс IDebugProperty2.

  10. Visual Studio вызывает для каждой локальной переменной метод GetPropertyInfo и получает ее имя, значение и тип. Эти сведения отображаются в окне Локальные переменные.

В этом разделе

Реализация GetMethodProperty — описывает реализацию метода GetMethodProperty.

Перечисление локальных переменных — описывает, как модуль отладки совершает вызов для перечисления локальных переменных или аргументов.

Получение свойств локальных элементов — описывает, как модуль отладки совершает вызов для получения имени, типа и значений локальных переменных.

Получение значений локальных переменных — описывает получение значения локальной переменной с помощью объекта модуля привязки, предоставляемого контекстом вычислений.

Вычисление локальных переменных — поясняет принципы вычисления локальных переменных.

Контекст вычислений — указывает аргументы, передаваемые при вызове вычислителя выражений из модуля отладки.

Пример для MyCEE — демонстрирует один из подходов к реализации создания вычислителя выражений на языке MyC.

См. также