Поделиться через


Метод IDebugHostEvaluator2::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<IDebugHostEvaluator2> 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

См. также

интерфейс IDebugHostEvaluator2