局部变量的示例实现

重要

在 Visual Studio 2015 中,这种实现表达式计算器的方法已弃用。 有关实现 CLR 表达式计算器的信息,请参阅 CLR 表达式计算器托管表达式计算器示例

以下是有关 Visual Studio 如何从表达式计算器 (EE) 中获取方法的局部变量的概述:

  1. Visual Studio 调用调试引擎 (DE) 的 GetDebugProperty 以获取表示堆栈帧的所有属性的 IDebugProperty2 对象,包括局部变量。

  2. IDebugStackFrame2::GetDebugProperty 调用 GetMethodProperty 以获取描述断点在其中发生的方法的对象。 DE 提供符号提供程序 (IDebugSymbolProvider)、地址 (IDebugAddress) 和绑定 (IDebugBinder)。

  3. IDebugExpressionEvaluator::GetMethodProperty 调用 GetContainerField 和提供的 IDebugAddress 对象以获取表示包含特定地址的方法的 IDebugContainerField

  4. 针对 IDebugMethodField 接口查询 IDebugContainerField 接口。 通过此接口可以访问方法的局部变量。

  5. IDebugExpressionEvaluator::GetMethodProperty 实例化运行 IDebugProperty2 接口的类(示例中称为 CFieldProperty),以表示方法的局部变量。 IDebugMethodField 对象与 IDebugSymbolProviderIDebugAddressIDebugBinder 对象一起放置在此 CFieldProperty 对象中。

  6. 初始化 CFieldProperty 对象时,GetInfo 针对 IDebugMethodField 对象调用,以获取包含有关方法本身的所有可显示信息的 FIELD_INFO 结构。

  7. IDebugExpressionEvaluator::GetMethodProperty 返回 CFieldProperty 对象,作为 IDebugProperty2 对象。

  8. Visual Studio 针对具有筛选器 guidFilterLocalsPlusArgs 的返回的 IDebugProperty2 对象调用 EnumChildren,它返回包含方法的局部变量的 IEnumDebugPropertyInfo2 对象。 此枚举由对 EnumLocalsEnumArguments 的调用填充。

  9. Visual Studio 调用 Next 以获取每个局部变量的 DEBUG_PROPERTY_INFO 结构。 此结构包含针对局部变量的 IDebugProperty2 接口的指针。

  10. Visual Studio 调用每个局部变量的 GetPropertyInfo,以获取局部变量名称、值和类型。 此信息显示在“局部变量”窗口中

本节内容

实现 GetMethodProperty 描述 GetMethodProperty 的实现。

枚举局部变量 描述调试引擎 (DE) 如何进行调用以枚举局部变量或参数。

获取局部变量属性 描述 DE 如何进行调用以获取一个或多个局部变量的名称、类型和值。

获取局部变量值 讨论如何获取局部变量的值,这需要计算上下文给出的绑定对象的服务。

计算局部变量 说明如何计算局部变量。

计算上下文 提供在 DE 调用表达式计算器 (EE) 时传递的参数。

MyCEE 示例演示一种实现方法,该方法用于创建 MyC 语言的表达式计算器。

另请参阅