IDebugExpressionEvaluator

此接口表示表达式计算器。

IDebugExpressionEvaluator : IUnknown

实现者说明

表达式计算器必须实现此接口。

调用方的说明

若要获取此接口,通过 CoCreateInstance 方法实例化表达式计算器使用类 ID (CLSID) 则计算器。 请参见示例。

方法按 Vtable 顺序

下表显示 IDebugExpressionEvaluator方法。

方法

说明

IDebugExpressionEvaluator:: 分析

将表达式字符串转换为分析的表达式。

IDebugExpressionEvaluator:: GetMethodProperty

获取局部变量、参数和方法的其他属性。

IDebugExpressionEvaluator:: GetMethodLocationProperty

将一个方法位置和偏移量内存地址中。

IDebugExpressionEvaluator:: SetLocale

确定使用哪种语言创建可打印的结果。

IDebugExpressionEvaluator:: SetRegistryRoot

设置注册表根。 用于并行调试。

备注

典型的状态,调试引擎 (DE)实例化表达式计算器 (EE)由于调用 IDebugExpressionContext2:: ParseText。 由于 DE 知道需要使用 EE 的语言和供应商, DE 从注册表 ( 调试的 SDK 帮助器 功能, GetEEMetric,则使用此检索的帮助获取 EE 的 CLSID)。

在 EE 实例化后, DE 在 IDebugParsedExpression 对象调用 IDebugExpressionEvaluator:: 分析 分析表达式和存储它。 之后,对 IDebugParsedExpression:: EvaluateSync 的调用计算表达式。

要求

标题:ee.h

命名空间:Microsoft.VisualStudio.Debugger.Interop

程序集:Microsoft.VisualStudio.Debugger.Interop.dll

示例

此示例演示如何实例化表达式计算器提供一个符号提供程序和一个地址在源代码。 此示例使用函数, GetEEMetric,从 调试的 SDK 帮助器 库, dbgmetric.lib。

IDebugExpressionEvaluator GetExpressionEvaluator(IDebugSymbolProvider pSymbolProvider,
                                                 IDebugAddress *pSourceAddress)
{
    // This is typically defined globally but is specified here just
    // for this example.
    static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0Exp";

    IDebugExpressionEvaluator *pEE = NULL;
    if (pSymbolProvider != NULL && pSourceAddress != NULL) {
        HRESULT hr         = S_OK;
        GUID  languageGuid = { 0 };
        GUID  vendorGuid   = { 0 };

        hr = pSymbolProvider->GetLanguage(pSourceAddress,
                                          &languageGuid,
                                          &vendorGuid);
        if (SUCCEEDED(hr)) {
            CLSID clsidEE      = { 0 };
            CComPtr<IDebugExpressionEvaluator> spExpressionEvaluator;
            // Get the expression evaluator's CLSID from the registry.
            ::GetEEMetric(languageGuid,
                          vendorGuid,
                          metricCLSID,
                          &clsidEE,
                          strRegistrationRoot);
            if (!IsEqualGUID(clsidEE,GUID_NULL)) {
                // Instantiate the expression evaluator.
                spExpressionEvaluator.CoCreateInstance(clsidEE);
            }
            if (spExpressionEvaluator != NULL) {
                pEE = spExpressionEvaluator.Detach();
            }
        }
    }
    return pEE;
}

请参见

参考

IDebugExpressionContext2:: ParseText

IDebugParsedExpression

IDebugParsedExpression:: EvaluateSync

调试的 SDK 帮助器

概念

表达式计算接口