Метод IDebugHostEvaluator::EvaluateExtendedExpression (dbgmodel.h)
Метод EvaluateExtendedExpression аналогичен методу EvaluateExpression, за исключением того, что он возвращает дополнительные функции, не относящиеся к языку, которые конкретный узел отладки выбирает для добавления в свой вычислитель выражений. Например, для средств отладки для Windows это позволяет использовать анонимные типы, запросы LINQ, квалификаторы модулей, описатели формата и другие функции, отличные от C/C++.
Важно отметить, что нет никакой гарантии, что выражение, которое вычисляется для одного узла с помощью EvaluateExtendedExpression, будет правильно оцениваться по отношению к другому узлу, который отлаживать тот же язык. Расширения в средстве оценки выражений являются областью действия данного узла. По этой причине клиентам настоятельно рекомендуется использовать метод EvaluateExpression вместо метода EvaluateExtendedExpression. Использование этого метода снижает переносимость вызывающего объекта.
Синтаксис
HRESULT EvaluateExtendedExpression(
IDebugHostContext *context,
PCWSTR expression,
IModelObject *bindingContext,
_COM_Errorptr_ IModelObject **result,
IKeyStore **metadata
);
Параметры
context
Контекст узла, в котором выполняется вычисление выражения. При наличии, например, операций чтения памяти целевого объекта из-за разыменования указателей, адресное пространство, в котором выполняются эти операции чтения памяти, задается этим аргументом.
expression
Вычисляемое выражение. Для этого могут использоваться частные расширения для размещения для синтаксиса языка.
bindingContext
Контекст привязки, в котором будут искаться имена символов (переменных). Для C++ это семантически эквивалентно значению этого указателя.
result
Сюда будет возвращено результирующее значение вычисления выражения.
metadata
Здесь возвращаются все метаданные, связанные с выражением или результатом.
Возвращаемое значение
Этот метод возвращает HRESULT, который указывает на успех или сбой.
Комментарии
Образец кода
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.
}
}
Требования
Требование | Значение |
---|---|
Заголовок | dbgmodel.h |