重要
在 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 该对象。
注释
即使 Visual Studio 假定此过程,EE 也不需要遵循这两个步骤;调用 EvaluateSync 时,EE 可以在同一步骤中分析和评估(例如,MyCEE 示例的工作原理)。 如果语言可以形成复杂的表达式,则可能需要将分析步骤与计算步骤分开。 当显示许多监视表达式时,这可以提高 Visual Studio 调试器的性能。
本部分内容
表达式计算的示例实现 使用 MyCEE 示例逐步完成表达式计算过程。
评估监视表达式 说明成功解析表达式后会发生什么情况。
相关内容
计算上下文 提供调试引擎 (DE) 调用表达式计算器 (EE) 时传递的参数。