Оценка выражения окна просмотра

Важно!

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

При приостановке выполнения Visual Studio вызывает подсистему отладки (DE), чтобы определить текущее значение каждого выражения в списке наблюдения. De вычисляет каждое выражение с помощью вычислителя выражений (EE), а Visual Studio отображает его значение в окне контрольных значений.

Ниже приведен обзор оценки выражения списка часов:

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

  2. Для каждого выражения в списке контрольных значений Visual Studio вызывает ParseText для преобразования текста выражения в проанализированное выражение.

  3. IDebugExpressionContext2::ParseText вызывает Parse для выполнения фактической работы синтаксического анализа текста и создания объекта IDebugParsedExpression .

  4. IDebugExpressionContext2::ParseTextсоздает объект IDebugExpression2 и помещает IDebugParsedExpression его в него. Затем этот объект IDebugExpression2 возвращается в Visual Studio.

  5. Visual Studio вызывает EvaluateSync для оценки синтаксического выражения.

  6. IDebugExpression2::EvaluateSync Передает вызов в EvaluateSync для выполнения фактической оценки и создания объекта IDebugProperty2 , возвращаемого в Visual Studio.

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

Затем вычисляется синтаксический анализ

Так как анализ сложного выражения может занять гораздо больше времени, чем оценка, процесс оценки выражения разбивается на два шага: 1) анализ выражения и 2) оценка проанализированного выражения. Таким образом, оценка может выполняться несколько раз, но выражение необходимо проанализировать только один раз. Промежуточное проанализированное выражение возвращается из EE в объекте IDebugParsedExpression, который в свою очередь инкапсулируется и возвращается из DE в качестве объекта IDebugExpression2. Объект IDebugExpression отложит все вычисления объекту IDebugParsedExpression .

Примечание.

Для EE не требуется придерживаться этого двухэтапного процесса, даже если Visual Studio предполагает это; EE может анализировать и оценивать на том же шаге при вызове EvaluateSync (например, как работает пример MyCEE). Если язык может формировать сложные выражения, может потребоваться разделить шаг синтаксического анализа от шага оценки. Это может повысить производительность отладчика Visual Studio при отображении многих выражений часов.

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

Пример реализации оценки выражений использует пример MyCEE для пошагового выполнения процесса оценки выражений.

Оценка выражения часов объясняет, что происходит после успешного анализа выражений.