表达式计算器体系结构

与集成的一种所有权语言 Visual Studio 调试实现必需的表达式计算器 (EE)接口并调用公共语言的包表示运行时提供程序和符号 (SP)联编程序接口。 SP 和联编程序对象,与当前执行地址一起,是计算表达式的上下文。 这些接口生成并使用的信息。 EE 的体系结构中表示关键概念。

概述

分析表达式

在调试程序时,表达式为多种原因进行计算,但总是,当正在调试的程序终止了在断点上时 (用户放置的异常导致的断点或)。 现在是 Visual Studio 获取一个堆栈帧,如由 IDebugStackFrame2 接口,从调试引擎 (DE)。 Visual Studio 然后调用 IDebugStackFrame2:: GetExpressionContext 获取 IDebugExpressionContext2 接口。 此接口表示可以在其中计算表达式的上下文; IDebugExpressionContext2:: ParseText 是入口点级别程序。 到此+为止,所有接口由 DE 实现。

IDebugExpressionContext2::ParseText 调用时, DE 实例化 EE 与断点发生源文件的语言 (DE 此时还实例化嘘)。 EE 由 IDebugExpressionEvaluator 接口表示。 DE 然后调用 IDebugExpressionEvaluator:: 分析 将表达式 (以文本形式) 转换为分析的表达式,准备用于计算。 此分析的表达式由 IDebugParsedExpression 接口表示。 注意该表达式通常分析和此时不会计算。

DE 创建一个对象实现 IDebugExpression2 接口,将 IDebugParsedExpression 对象到 IDebugExpression2 对象,并从 IDebugExpressionContext2::ParseTextIDebugExpression2 对象。

计算表达式

Visual Studio 会调用 IDebugExpression2:: EvaluateSyncIDebugExpression2:: EvaluateAsync 计算已分析的表达式。 这两个方法调用 IDebugParsedExpression:: EvaluateSync (IDebugExpression2::EvaluateSync 立即调用方法,,而 IDebugExpression2::EvaluateAsync 通过后台线程调用方法) 计算已分析的表达式并返回表示已分析的表达式的值和类型的 IDebugProperty2 接口。 IDebugParsedExpression::EvaluateSync 使用此类所提供的嘘,地址和联编程序将分析的表达式转换为实际值,由 IDebugProperty2 接口。

例如

在断点在运行的程序后被命中,用户选择查看在 " 对话框中的变量。 此对话框显示变量名、其值及其类型。 用户通常可以更改值。

" 对话框显示时,变量名中检查发送作为文本。 IDebugExpressionContext2:: ParseText。 这将返回一个表示分析表达式的 IDebugExpression2 对象,在这种情况下,变量。 IDebugExpression2:: EvaluateSync 然后调用生成表示变量值和类型的 IDebugProperty2 对象,以及其名称。 它已显示此信息。

如果用户更改变量的值, IDebugProperty2:: SetValueAsString 调用与新值,更改变量的值存储在内存中,因此将使用它,当程序还原运行时。

有关更多详细信息参见 显示本地 此过程显示变量的值。 有关更多详细信息参见 更改本地的值 有关如何更改值。

本节内容

请参见

概念

更改本地的值

其他资源

编写公共语言运行时表达式计算器

显示本地