局部变量的示例实现

重要

在 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 实例化一个类(在示例中称为 CFieldProperty),该类运行 IDebugProperty2 接口以表示方法的局部变量。 IDebugMethodField 对象与 IDebugSymbolProviderIDebugAddressIDebugBinder 对象一起放置在此 CFieldProperty 对象中。

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

  7. IDebugExpressionEvaluator::GetMethodPropertyCFieldProperty 对象作为 IDebugProperty2 对象返回。

  8. Visual Studio 对返回的 IDebugProperty2 对象使用筛选器 guidFilterLocalsPlusArgs调用 EnumChildren ,该操作返回一个包含方法局部变量的 IEnumDebugPropertyInfo2 对象。 此枚举由对 EnumLocalsEnumArguments 的调用填充。

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

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

本节内容

实现 GetMethodProperty 描述了 GetMethodProperty的实现。

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

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

获取本地值 讨论如何获取本地值,这需要评估上下文提供的绑定对象的服务。

评估局部变量 说明如何评估局部变量。

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

MyCEE 示例 演示了为 MyC 语言创建表达式计算器的一种实现方法。

另请参阅