IDebugExpressionEvaluator

Importante

No Visual Studio 2015, essa maneira de implementar avaliadores de expressão foi preterida. Para obter informações sobre como implementar avaliadores de expressão CLR, consulte Avaliadores de expressão CLR e Amostra de avaliador de expressão gerenciada.

Essa interface representa o avaliador da expressão.

Sintaxe

IDebugExpressionEvaluator : IUnknown

Notas para implementadores

O avaliador de expressão deve implementar essa interface.

Observações para chamadores

Para obter essa interface, instancie o avaliador de expressão por meio do CoCreateInstance método usando o ID de classe (CLSID) do avaliador. Veja o exemplo.

Métodos na ordem VTable

A tabela a seguir mostra os métodos de IDebugExpressionEvaluator.

Método Descrição
Analisar Converte uma cadeia de caracteres de expressão em uma expressão analisada.
GetMethodProperty Obtém as variáveis locais, argumentos e outras propriedades de um método.
GetMethodLocationProperty Converte um local de método e deslocamento em um endereço de memória.
SetLocale Determina qual idioma usar para criar resultados imprimíveis.
SetRegistryRoot Define a raiz do Registro. Usado para depuração lado a lado.

Comentários

Em uma situação típica, o mecanismo de depuração (DE) instancia o avaliador de expressão (EE) como resultado de uma chamada para ParseText. Como o DE conhece o idioma e o fornecedor do EE que deseja usar, o DE obtém o CLSID do EE do registro (a função SDK Helpers for Debugging , , GetEEMetricajuda nessa recuperação).

Depois que o EE é instanciado, o DE chama Parse para analisar a expressão e armazená-la em um objeto IDebugParsedExpression. Posteriormente, uma chamada para EvaluateSync avalia a expressão.

Requisitos

Cabeçalho: ee.h

Espaço para nome: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Exemplo

Este exemplo mostra como instanciar o avaliador de expressão dado um provedor de símbolo e um endereço no código-fonte. Este exemplo usa uma função, , da biblioteca SDK Helpers for Debugging, GetEEMetricdbgmetric.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;
}

Confira também