Оценка выражения окна просмотра
Важно!
В Visual Studio 2015 такая реализация вычислителя выражений была сделана нерекомендуемой. Сведения о реализации вычислителей выражений в среде CLR см. на страницах CLR expression evaluators (Вычислители выражений CLR) и Managed expression evaluator sample (Пример управляемого вычислителя выражений).
При приостановке выполнения Visual Studio вызывает подсистему отладки (DE), чтобы определить текущее значение каждого выражения в списке наблюдения. De вычисляет каждое выражение с помощью вычислителя выражений (EE), а Visual Studio отображает его значение в окне контрольных значений.
Ниже приведен обзор оценки выражения списка часов:
Visual Studio вызывает GetExpressionContext de для получения контекста выражения, который можно использовать для вычисления выражений.
Для каждого выражения в списке контрольных значений Visual Studio вызывает ParseText для преобразования текста выражения в проанализированное выражение.
IDebugExpressionContext2::ParseText
вызывает Parse для выполнения фактической работы синтаксического анализа текста и создания объекта IDebugParsedExpression .IDebugExpressionContext2::ParseText
создает объект IDebugExpression2 и помещаетIDebugParsedExpression
его в него. Затем этот объект IDebugExpression2
возвращается в Visual Studio.Visual Studio вызывает EvaluateSync для оценки синтаксического выражения.
IDebugExpression2::EvaluateSync
Передает вызов в EvaluateSync для выполнения фактической оценки и создания объекта IDebugProperty2 , возвращаемого в Visual Studio.Visual Studio вызывает GetPropertyInfo , чтобы получить значение выражения, которое затем отображается в списке наблюдения.
Затем вычисляется синтаксический анализ
Так как анализ сложного выражения может занять гораздо больше времени, чем оценка, процесс оценки выражения разбивается на два шага: 1) анализ выражения и 2) оценка проанализированного выражения. Таким образом, оценка может выполняться несколько раз, но выражение необходимо проанализировать только один раз. Промежуточное проанализированное выражение возвращается из EE в объекте IDebugParsedExpression, который в свою очередь инкапсулируется и возвращается из DE в качестве объекта IDebugExpression2. Объект IDebugExpression
отложит все вычисления объекту IDebugParsedExpression
.
Примечание.
Для EE не требуется придерживаться этого двухэтапного процесса, даже если Visual Studio предполагает это; EE может анализировать и оценивать на том же шаге при вызове EvaluateSync (например, как работает пример MyCEE). Если язык может формировать сложные выражения, может потребоваться разделить шаг синтаксического анализа от шага оценки. Это может повысить производительность отладчика Visual Studio при отображении многих выражений часов.
В этом разделе
Пример реализации оценки выражений использует пример MyCEE для пошагового выполнения процесса оценки выражений.
Оценка выражения часов объясняет, что происходит после успешного анализа выражений.
Связанный контент
Контекст оценки предоставляет аргументы, передаваемые при вызове обработчика отладки (DE), вызывает средство оценки выражений (EE).