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í , GetEEMetric
pomá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 GetEEMetric
pomocný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;
}