IDebugExpressionEvaluator
Importante
In Visual Studio 2015 questo modo di implementare gli analizzatori di espressioni è deprecato. Per informazioni sull'implementazione degli analizzatori di espressioni CLR, vedere l'esempio di analizzatori di espressioni CLR e dell'analizzatore di espressioni gestite.
Questa interfaccia rappresenta l'analizzatore di espressioni.
Sintassi
IDebugExpressionEvaluator : IUnknown
Note per gli implementatori
L'analizzatore di espressioni deve implementare questa interfaccia.
Note per i chiamanti
Per ottenere questa interfaccia, creare un'istanza dell'analizzatore di espressioni tramite il CoCreateInstance
metodo usando l'ID classe (CLSID) dell'analizzatore. Vedere l'esempio.
Metodi nell'ordine Vtable
Nella tabella seguente vengono illustrati i metodi di IDebugExpressionEvaluator
.
metodo | Descrizione |
---|---|
Parse. | Converte una stringa di espressione in un'espressione analizzata. |
GetMethodProperty | Ottiene le variabili locali, gli argomenti e altre proprietà di un metodo. |
GetMethodLocationProperty | Converte una posizione del metodo e un offset in un indirizzo di memoria. |
SetLocale | Determina la lingua da utilizzare per creare risultati stampabili. |
SetRegistryRoot | Imposta la radice del Registro di sistema. Utilizzato per il debug side-by-side. |
Osservazioni:
In una situazione tipica, il motore di debug crea un'istanza dell'analizzatore di espressioni (edizione Enterprise) in seguito a una chiamata a ParseText. Poiché DE conosce il linguaggio e il fornitore del edizione Enterprise che vuole usare, il DE ottiene il CLSID del edizione Enterprise dal Registro di sistema (gli helper SDK per il debug, GetEEMetric
, aiutano con questo recupero).
Dopo aver creato un'istanza del edizione Enterprise, de chiama Parse per analizzare l'espressione e archiviarla in un oggetto IDebugParsedExpression. Successivamente, una chiamata a EvaluateSync valuta l'espressione.
Requisiti
Intestazione: ee.h
Spazio dei nomi: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll
Esempio
In questo esempio viene illustrato come creare un'istanza dell'analizzatore di espressioni in base a un provider di simboli e a un indirizzo nel codice sorgente. Questo esempio usa una funzione, GetEEMetric
, dagli helper SDK per il debug della libreria 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;
}