IDebugHostEvaluator::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<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 |