IDebugExpressionEvaluator

Aplica-se a:yes Visual Studio noVisual Studio para Mac noVisual Studio Code

Importante

No Visual Studio 2015, essa forma de implementar avaliadores de expressão é preterida. Para obter informações sobre como implementar avaliadores de expressão CLR, consulte avaliadores de expressão CLR e exemplo de avaliador de expressão gerenciada.

Essa interface representa o avaliador de expressão.

Syntax

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 a ID de classe (CLSID) do avaliador. Veja o exemplo.

Métodos em ordem de 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 DE (mecanismo de depuração) instancia o EE (avaliador de expressão) como resultado de uma chamada ao 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 GetEEMetricAuxiliares do SDK para Depuração ajuda nessa recuperação).

Depois que o EE for instanciado, o DE chamará 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

Namespace: 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ímbolos e um endereço no código-fonte. Este exemplo usa uma função, GetEEMetricdos Auxiliares do SDK para Biblioteca de Depuração , 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;
}

Confira também