局部变量的示例实现
重要
在 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
实例化运行IDebugProperty2
接口的类(示例中称为CFieldProperty
),以表示方法的局部变量。IDebugMethodField
对象与IDebugSymbolProvider
、IDebugAddress
和IDebugBinder
对象一起放置在此CFieldProperty
对象中。初始化
CFieldProperty
对象时,GetInfo 针对IDebugMethodField
对象调用,以获取包含有关方法本身的所有可显示信息的 FIELD_INFO 结构。IDebugExpressionEvaluator::GetMethodProperty
返回CFieldProperty
对象,作为IDebugProperty2
对象。Visual Studio 针对具有筛选器
guidFilterLocalsPlusArgs
的返回的IDebugProperty2
对象调用 EnumChildren,它返回包含方法的局部变量的 IEnumDebugPropertyInfo2 对象。 此枚举由对 EnumLocals 和 EnumArguments 的调用填充。Visual Studio 调用 Next 以获取每个局部变量的 DEBUG_PROPERTY_INFO 结构。 此结构包含针对局部变量的
IDebugProperty2
接口的指针。Visual Studio 调用每个局部变量的 GetPropertyInfo,以获取局部变量名称、值和类型。 此信息显示在“局部变量”窗口中。
本节内容
实现 GetMethodProperty 描述 GetMethodProperty 的实现。
枚举局部变量 描述调试引擎 (DE) 如何进行调用以枚举局部变量或参数。
获取局部变量属性 描述 DE 如何进行调用以获取一个或多个局部变量的名称、类型和值。
获取局部变量值 讨论如何获取局部变量的值,这需要计算上下文给出的绑定对象的服务。
计算局部变量 说明如何计算局部变量。
相关章节
计算上下文 提供在 DE 调用表达式计算器 (EE) 时传递的参数。
MyCEE 示例演示一种实现方法,该方法用于创建 MyC 语言的表达式计算器。