Compartilhar via


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