重要
在 Visual Studio 2015 中,这种实现表达式计算器的方法已弃用。 有关实现 CLR 表达式计算器的信息,请参阅 CLR 表达式计算器 和 托管表达式计算器示例。
下面是 Visual Studio 如何从表达式计算器(EE)获取方法的局部变量的概述:
Visual Studio 调用调试引擎的 (DE) GetDebugProperty 以获取表示堆栈帧的所有属性(包括局部变量)的 IDebugProperty2 对象。
IDebugStackFrame2::GetDebugProperty
调用 GetMethodProperty 以获取描述断点发生方法的对象。 DE 提供符号提供程序(IDebugSymbolProvider)、地址(IDebugAddress)和绑定器(IDebugBinder)。IDebugExpressionEvaluator::GetMethodProperty
调用 GetContainerField 和提供的IDebugAddress
对象以获取表示包含特定地址的方法的 IDebugContainerField。针对 IDebugMethodField 接口查询
IDebugContainerField
接口。 此接口提供对方法局部变量的访问权限。IDebugExpressionEvaluator::GetMethodProperty
实例化一个类(在示例中称为CFieldProperty
),该类运行IDebugProperty2
接口以表示方法的局部变量。IDebugMethodField
对象与IDebugSymbolProvider
、IDebugAddress
和IDebugBinder
对象一起放置在此CFieldProperty
对象中。初始化
CFieldProperty
对象时,IDebugMethodField
对象上调用 GetInfo 以获取包含方法本身的所有可显示信息的 FIELD_INFO 结构。IDebugExpressionEvaluator::GetMethodProperty
将CFieldProperty
对象作为IDebugProperty2
对象返回。Visual Studio 对返回的
IDebugProperty2
对象使用筛选器guidFilterLocalsPlusArgs
调用 EnumChildren ,该操作返回一个包含方法局部变量的 IEnumDebugPropertyInfo2 对象。 此枚举由对 EnumLocals 和 EnumArguments 的调用填充。Visual Studio 调用 Next 以获取每个局部变量的 DEBUG_PROPERTY_INFO 结构。 此结构包含针对局部变量的
IDebugProperty2
接口的指针。Visual Studio 为每个本地调用 GetPropertyInfo,以获取本地的名称、值和类型。 此信息显示在 局部变量 窗口中。
本节内容
实现 GetMethodProperty 描述了 GetMethodProperty的实现。
枚举局部变量 描述调试引擎(DE)如何调用枚举局部变量或参数。
获取本地属性 描述 DE 如何调用以获取一个或多个局部变量的名称、类型和值。
获取本地值 讨论如何获取本地值,这需要评估上下文提供的绑定对象的服务。
评估局部变量 说明如何评估局部变量。
相关部分
评估上下文 提供 DE 调用表达式计算器 (EE) 时传递的参数。
MyCEE 示例 演示了为 MyC 语言创建表达式计算器的一种实现方法。