Condividi tramite


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

Vedi anche