当执行暂停时, Visual Studio 会调用调试引擎 (DE)确定每个表达式的当前值在其监视的列表。 使用表达式计算器, DE 评估每个表达式 (EE)和 Visual Studio 显示其在 监视 窗口中的值。
这是概述监视如何列出计算表达式:
Visual Studio 称为 " DE 的 IDebugStackFrame2:: GetExpressionContext 获取来计算表达式的表达式上下文。
对于监视的每个表达式列表, Visual Studio 会调用 IDebugExpressionContext2:: ParseText 将表达式文本转换为分析的表达式。
IDebugExpressionContext2::ParseText 调用 IDebugExpressionEvaluator:: 分析 完成分析该文本实际工作并导致 IDebugParsedExpression 对象。
IDebugExpressionContext2::ParseText 创建一 IDebugExpression2 对象并使 IDebugParsedExpression 对象传递给它。 这 IDebugExpression2 对象并返回到 Visual Studio。
Visual Studio 会调用 IDebugExpression2:: EvaluateSync 计算已分析的表达式。
IDebugExpression2::EvaluateSync 通过调用 IDebugParsedExpression:: EvaluateSync 执行实际计算并导致返回到 Visual Studio 的 IDebugProperty2 对象。
Visual Studio 会调用 IDebugProperty2:: GetPropertyInfo 获取在 " 监视 " 然后显示列表表达式的值。
分析来计算
从分析复杂表达式的计算,该计算表达式处理分为两步花费的时间:1) 分析表达式,而 2) 计算已分析的表达式。 这样,计算可能发生多次,而表达式只需一次分析。 中间分析的表达式从又从、封装并返回作为 IDebugExpression2 对象的 IDebugParsedExpression 对象的 EE 返回。 IDebugExpression 对象延迟所有计算为 IDebugParsedExpression 对象。
备注
遵循此过程分为两步 EE 并不是必需的,即使 Visual Studio 假设此;EE 在同一个步骤可以分析和计算,当 IDebugParsedExpression:: EvaluateSync 调用时 (这是 MyCEE 示例的工作机制,例如)。如果该语言可能面临复杂表达式,您可能希望从计算步骤分离分析步骤。,在许多监视表达式显示时,这会增加在 Visual Studio 调试器的性能。
本节内容
采样表达式计算的实现
使用 MyCEE 示例通过表达式计算过程。计算监视表达式
解释发生的情况,在一个成功的表达式分析后。
相关章节
- 计算上下文
提供传递的参数,在调试引擎 (DE)调用表达式计算器时。 (EE)