IDebugHostEvaluator2::EvaluateExtendedExpression 方法 (dbgmodel.h)

EvaluateExtendedExpression 方法类似于 EvaluateExpression 方法,只是它重新启用特定调试主机选择添加到其表达式计算器的其他非语言功能。 例如,对于 Windows 调试工具,这可实现匿名类型、LINQ 查询、模块限定符、格式说明符和其他非 C/C++ 功能。

请务必注意,不能保证通过 EvaluateExtendedExpression 针对一个主机计算的表达式将针对调试相同语言的另一个主机正确计算。 表达式计算器中的扩展是给定主机的 purview。 强烈建议客户端出于此确切原因使用 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 接口