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


Метод IDebugHostEvaluator::EvaluateExpression (dbgmodel.h)

Метод EvaluateExpression позволяет запрашивать узел отладки для оценки выражения языка (например, C++) и возвращать итоговое значение этого вычисления выражения в виде IModelObject. Этот конкретный вариант метода допускает только языковые конструкции. Любые дополнительные функциональные возможности, представленные в средстве оценки выражений узла отладки, отсутствующие в языке (например, методы запроса LINQ), отключены для оценки.

Так как этот метод использует только элементы, определенные языком отладки, этот метод является переносимым и безопасным для использования от узла к узлу. Узел отладки, реализующий отладку для определенного языка, должен вычислять выражение с помощью этого метода так же, как и любой другой узел, выполняющий отладку на том же языке. Таким образом, это предпочтительный метод для вычисления выражений.

Синтаксис

HRESULT EvaluateExpression(
  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<IModelObject> spThis; /* get some object, an example here: some native 
                                object with fields m_intVal and m_intVal2 */

ComPtr<IDebugHostEvaluator> spEval;
if (SUCCEEDED(spHost.As(&spEval)))
{
    ComPtr<IModelObject> spResult;
    ComPtr<IKeyStore> spMetadata;
    if (SUCCEEDED(spEval->EvaluateExpression(
        USE_CURRENT_HOST_CONTEXT, 
        L"m_intVal + this->m_intVal2", 
        spThis.Get(), 
        &spResult, 
        &spMetadata)))
    {
        // spResult will have the result of a language evaluation of 
        // "m_intVal + this->m_intVal2" where the name binding context 
        // (e.g.: *this* pointer) is spThis
        // spMetadata will have any additional metadata (e.g.: display radix, etc...)
    }
}

Требования

Требование Значение
Заголовок dbgmodel.h

См. также раздел

Интерфейс IDebugHostEvaluator