Sdílet prostřednictvím


IDebugExpressionEvaluator

Důležité

V sadě Visual Studio 2015 je tento způsob implementace vyhodnocovačů výrazů zastaralý. Informace o implementaci vyhodnocovačů výrazů CLR najdete v tématu Vyhodnocovače výrazů CLR a ukázka vyhodnocovače spravovaných výrazů.

Toto rozhraní představuje vyhodnocovače výrazů.

Syntaxe

IDebugExpressionEvaluator : IUnknown

Poznámky pro implementátory

Vyhodnocovače výrazů musí toto rozhraní implementovat.

Poznámky pro volající

Chcete-li získat toto rozhraní, vytvořte instanci vyhodnocovače výrazu CoCreateInstance prostřednictvím metody pomocí ID třídy (CLSID) vyhodnocovače. Podívejte se na příklad.

Metody v pořadí Vtable

Následující tabulka ukazuje metody IDebugExpressionEvaluator.

metoda Popis
Parse (Parsování) Převede řetězec výrazu na analyzovaný výraz.
GetMethodProperty Získá místní proměnné, argumenty a další vlastnosti metody.
GetMethodLocationProperty Převede umístění metody a posun na adresu paměti.
SetLocale Určuje, který jazyk se má použít k vytvoření tisknutelných výsledků.
SetRegistryRoot Nastaví kořen registru. Používá se pro souběžné ladění.

Poznámky

V typické situaci ladicí modul (DE) vytvoří instanci vyhodnocovače výrazu (EE) jako výsledek volání ParseText. Vzhledem k tomu, že DE zná jazyk a dodavatele EE, který chce použít, získá DE IDENTIFIKÁTOR CLSID EE z registru ( pomocné rutiny sady SDK pro funkci ladění , GetEEMetricpomáhá s tímto načtením).

Jakmile se vytvoří instance EE, de zavolá Parse parse výraz a uloží ho do IDebugParsedExpression objektu. Později volání EvaluateSync vyhodnotí výraz.

Požadavky

Hlavička: ee.h

Obor názvů: Microsoft.VisualStudio.Debugger.Interop

Sestavení: Microsoft.VisualStudio.Debugger.Interop.dll

Příklad

Tento příklad ukazuje, jak vytvořit instanci vyhodnocovače výrazu vzhledem k poskytovateli symbolů a adresu ve zdrojovém kódu. Tento příklad používá funkci z GetEEMetricpomocných rutin sady SDK pro knihovnu ladění 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;
}

Viz také