Método IDebugHostEvaluator::EvaluateExtendedExpression (dbgmodel.h)
El método EvaluateExtendedExpression es similar al método EvaluateExpression, salvo que vuelve a activar la funcionalidad no de lenguaje adicional que un host de depuración determinado elige agregar a su evaluador de expresiones. En herramientas de depuración para Windows, por ejemplo, esto habilita tipos anónimos, consultas LINQ, calificadores de módulo, especificadores de formato y otras funciones que no son de C/C++.
Es importante tener en cuenta que no hay ninguna garantía de que una expresión que se evalúe en un host a través de EvaluateExtendedExpression se evaluará correctamente en otro host que depura el mismo lenguaje. Las extensiones del evaluador de expresiones son la purview de un host determinado. Se recomienda encarecidamente que los clientes utilicen el método EvaluateExpression en lugar del método EvaluateExtendedExpression por este motivo exacto. El uso de este método reduce la portabilidad del autor de la llamada.
Sintaxis
HRESULT EvaluateExtendedExpression(
IDebugHostContext *context,
PCWSTR expression,
IModelObject *bindingContext,
_COM_Errorptr_ IModelObject **result,
IKeyStore **metadata
);
Parámetros
context
Contexto de host en el que se produce la evaluación de expresiones. Si hay, por ejemplo, lecturas de memoria del destino debido a desreferencias de puntero, este argumento asigna el espacio de direcciones en el que se realizan esas lecturas de memoria.
expression
Expresión que se va a evaluar. Esto puede usar extensiones privadas de host para la sintaxis del lenguaje.
bindingContext
Contexto de enlace en el que se buscarán los nombres de símbolo (variable). Para C++, esto es semánticamente equivalente al valor de este puntero.
result
El valor resultante de la evaluación de expresiones se devolverá aquí.
metadata
Los metadatos asociados a la expresión o el resultado se devuelven aquí.
Valor devuelto
Este método devuelve HRESULT, que indica que se ha realizado correctamente o no.
Comentarios
Ejemplo de código
ComPtr<IDebugHost> spHost; /* get the host */
ComPtr<IDebugHostEvaluator> spEval;
if (SUCCEEDED(spHost.As(&spEval)))
{
ComPtr<IModelObject> spNotepadProcesses;
// We can use any syntax that's private to the host (not only
// language syntax). This is not necessarily portable from host to host
if (SUCCEEDED(spEval->EvaluateExtendedExpression(
USE_CURRENT_HOST_CONTEXT,
L"@$cursession->Processes.Where(p => p.Name == \"notepad.exe\")",
nullptr,
&spNotepadProcesses,
nullptr)))
{
// spNotepadProcesses will contain a collection of every process
// named (exactly) "notepad.exe". Such can be iterated with IIterableConcept.
}
}
Requisitos
Requisito | Valor |
---|---|
Header | dbgmodel.h |