计算监视窗口表达式
重要
在 Visual Studio 2015 中,这种实现表达式计算器的方法已弃用。 有关实现 CLR 表达式计算器的信息,请参阅 CLR 表达式计算器和托管表达式计算器示例。
执行暂停时,Visual Studio 会调用调试引擎 (DE),以确定其监视列表中的每个表达式的当前值。 DE 使用表达式计算器 (EE) 计算每个表达式,Visual Studio 在“监视”窗口中显示其值。
以下是如何计算监视列表表达式的概述:
Visual Studio 调用 DE 的 GetExpressionContext,以获取可用于计算表达式的表达式上下文。
对于监视列表中的每个表达式,Visual Studio 调用 ParseText,将表达式文本转换为已分析的表达式。
IDebugExpressionContext2::ParseText
调用 Parse 以执行分析文本和生成 IDebugParsedExpression 对象的实际工作。IDebugExpressionContext2::ParseText
创建 IDebugExpression2 对象并将IDebugParsedExpression
对象放入其中。 然后,此IDebugExpression2
对象将返回到 Visual Studio。Visual Studio 调用 EvaluateSync 以计算分析的表达式。
IDebugExpression2::EvaluateSync
传递对 EvaluateSync 的调用,以执行实际计算并生成 返回到 Visual Studio 的 IDebugProperty2 对象。Visual Studio 调用 GetPropertyInfo 以获取表达式的值,随后将其显示在监视列表中。
分析,然后计算
由于分析复杂表达式所需的时间比计算表达式长得多,因此计算表达式的过程分为两个步骤:1) 分析表达式,2) 计算分析的表达式。 这样,计算可以发生多次,但表达式只需分析一次。 中间分析表达式从 IDebugParsedExpression 对象中的 EE 返回,该对象又作为 IDebugExpression2 对象封装并从 DE 返回。 IDebugExpression
对象将所有计算延迟到 IDebugParsedExpression
对象。
注意
EE 不必遵循这两个步骤,即使 Visual Studio 假定这一过程;调用 EvaluateSync 时,EE 可以在同一步骤中分析和计算(例如,这是 MyC EE 示例的工作原理)。 如果语言可以形成复杂的表达式,可能需要将分析步骤与计算步骤分开。 当显示许多监视表达式时,这可提高 Visual Studio 调试器的性能。
本节内容
表达式计算的示例实现使用 MyCEE 示例逐步介绍表达式计算过程。
计算监视表达式可解释成功分析表达式后会发生什么情况。
相关内容
计算上下文提供在调试引擎 (DE) 调用表达式计算器 (EE) 时传递的参数。