IDebugExpressionEvaluator

Importante

En Visual Studio 2015, esta forma de implementar evaluadores de expresiones está en desuso. Para obtener información sobre cómo implementar evaluadores de expresiones CLR, consulte ClR Expression Evaluadores y Ejemplo de evaluador de expresiones administradas.

Esta interfaz representa el evaluador de expresiones.

Sintaxis

IDebugExpressionEvaluator : IUnknown

Notas para los implementadores

El evaluador de expresiones debe implementar esta interfaz.

Notas para autores de la llamada

Para obtener esta interfaz, cree una instancia del evaluador de expresiones mediante el CoCreateInstance método mediante el identificador de clase (CLSID) del evaluador. Vea el ejemplo.

Métodos en orden de Vtable

En la tabla siguiente se muestran los métodos de IDebugExpressionEvaluator.

Método Descripción
Parse Convierte una cadena de expresión en una expresión analizada.
GetMethodProperty Obtiene las variables locales, los argumentos y otras propiedades de un método.
GetMethodLocationProperty Convierte una ubicación de método y un desplazamiento en una dirección de memoria.
SetLocale Determina qué idioma se va a usar para crear resultados imprimibles.
SetRegistryRoot Establece la raíz del Registro. Se usa para la depuración en paralelo.

Comentarios

En una situación típica, el motor de depuración (DE) crea una instancia del evaluador de expresiones (EE) como resultado de una llamada a ParseText. Dado que el DE conoce el lenguaje y el proveedor de EE que quiere usar, el DE obtiene el CLSID de EE del Registro (la función auxiliares del SDK para depuración , GetEEMetric, ayuda con esta recuperación).

Una vez creada la instancia de EE, el DE llama a Parse para analizar la expresión y almacenarla en un objeto IDebugParsedExpression . Más adelante, una llamada a EvaluateSync evalúa la expresión.

Requisitos

Encabezado: ee.h

Espacio de nombres: Microsoft.VisualStudio.Debugger.Interop

Ensamblado: Microsoft.VisualStudio.Debugger.Interop.dll

Ejemplo

En este ejemplo se muestra cómo crear instancias del evaluador de expresiones según un proveedor de símbolos y una dirección en el código fuente. En este ejemplo se usa una función , GetEEMetricde los asistentes del SDK para la biblioteca de depuración , 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;
}

Consulte también