共用方式為


IDebugExpressionEvaluator

重要

在 Visual Studio 2015 中,實作運算式評估工具的方式已被取代。 如需實作 CLR 運算式評估工具的相關信息,請參閱 CLR 運算式評估工具Managed 運算式評估工具範例

這個介面代表表達式評估工具。

語法

IDebugExpressionEvaluator : IUnknown

實作者的注意事項

表達式評估工具必須實作這個介面。

呼叫端注意事項

若要取得這個介面,請使用評估工具 CoCreateInstance 的類別識別碼 (CLSID) 透過 方法具現化運算式評估工具。 請參閱範例。

依照 Vtable 順序的方法

下表顯示 IDebugExpressionEvaluator 方法。

方法 描述
剖析 將表達式字串轉換為剖析的表達式。
GetMethodProperty 取得方法的局部變數、自變數和其他屬性。
GetMethodLocationProperty 將方法位置和位移轉換成記憶體位址。
SetLocale 決定要用來建立可列印結果的語言。
SetRegistryRoot 設定登錄根目錄。 用於並存偵錯。

備註

在一般情況下,偵錯引擎會因為呼叫 ParseText 而具現化表達式評估工具 (EE)。 由於 DE 知道想要使用之 EE 的語言和廠商,因此 DE 會從登錄取得 EE 的 CLSID( 適用於偵 錯的 SDK 協助程式函 GetEEMetric式 ,可協助進行此擷取)。

具現化 EE 之後,DE 會呼叫 Parse 來剖析表示式,並將其儲存在 IDebugParsedExpression 物件中。 之後,EvaluateSync呼叫會評估表達式。

需求

標頭:ee.h

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

元件:Microsoft.VisualStudio.Debugger.Interop.dll

範例

這個範例示範如何具現化指定符號提供者和原始碼中位址的表達式評估工具。 這個範例會從適用於偵錯連結庫 dbgmetric.lib 的 SDK 協助程式使用函GetEEMetric式 。

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;
}

另請參閱