更新:2007 年 11 月
提供使调试器能够在正在调试的代码的上下文中执行代码的方法。
interface ICorDebugEval : IUnknown {
HRESULT Abort ();
HRESULT CallFunction (
[in] ICorDebugFunction *pFunction,
[in] ULONG32 nArgs,
[in, size_is(nArgs)] ICorDebugValue *ppArgs[]
);
HRESULT CreateValue (
[in] CorElementType elementType,
[in] ICorDebugClass *pElementClass,
[out] ICorDebugValue **ppValue
);
HRESULT GetResult (
[out] ICorDebugValue **ppResult
);
HRESULT GetThread (
[out] ICorDebugThread **ppThread
);
HRESULT IsActive (
[out] BOOL *pbActive
);
HRESULT NewArray (
[in] CorElementType elementType,
[in] ICorDebugClass *pElementClass,
[in] ULONG32 rank,
[in, size_is(rank)] ULONG32 dims[],
[in, size_is(rank)] ULONG32 lowBounds[]
);
HRESULT NewObject (
[in] ICorDebugFunction *pConstructor,
[in] ULONG32 nArgs,
[in, size_is(nArgs)] ICorDebugValue *ppArgs[]
);
HRESULT NewObjectNoConstructor (
[in] ICorDebugClass *pClass
);
HRESULT NewString (
[in] LPCWSTR string
);
};
方法
方法 |
说明 |
---|---|
中止此 ICorDebugEval 对象当前正在执行的计算。 |
|
设置一个对指定函数的调用。(在 .NET Framework 2.0 版中已废弃;请改用 ICorDebugEval2::CallParameterizedFunction。) |
|
获取一个接口指针,该指针指向具有指定类型且初始值为零或 Null 的 ICorDebugValue对象。(在 .NET Framework 2.0 中已废弃;请改用 ICorDebugEval2::CreateValueForType。) |
|
获取一个指向包含计算结果的 ICorDebugValue 的接口指针。 |
|
获取一个指向正在或将要执行此计算的 ICorDebugThread 的接口指针。 |
|
获取一个值,该值指示当前是否正在执行此 ICorDebugEval 对象。 |
|
分配一个指定元素类型和维数的新数组。(在 .NET Framework 2.0 中已废弃;请改用 ICorDebugEval2::NewParameterizedArray。) |
|
分配一个新的对象实例并调用指定的构造函数方法。(在 .NET Framework 2.0 中已废弃;请改用 ICorDebugEval2::NewParameterizedObject。) |
|
分配一个新的指定类型的对象实例,而不尝试调用构造函数方法。(在 .NET Framework 2.0 中已废弃;请改用 ICorDebugEval2::NewParameterizedObjectNoConstructor。) |
|
分配一个具有指定内容的新字符串对象。 |
备注
ICorDebugEval 对象在用于执行计算的特定线程的上下文中创建。在给定计算中使用的所有对象和类型都必须驻留在同一个应用程序域内。该应用程序域不需要与该线程所在的当前应用程序域相同。计算可以嵌套。
只有在调试器调用 ICorDebugController::Continue 并随后收到 ICorDebugManagedCallback::EvalComplete 回调后,计算操作才完成。如果需要使用计算功能而不允许运行其他线程,请在调用 ICorDebugController::Continue 之前使用 ICorDebugController::SetAllThreadsDebugState 或 ICorDebugController::Stop 挂起这些线程。
在进行计算时,由于用户代码处于运行状态,因此可能会发生任何调试事件,其中包括类加载和断点。通常情况下,调试器将收到这些事件的回调。在检查正常程序状态时,将可以查看计算的状态。堆栈链将是 CHAIN_FUNC_EVAL 链(请参见 CorDebugStepReason 枚举和 ICorDebugChain::GetReason 方法)。整个调试器 API 将继续正常运行。
如果出现死锁或无限循环的情况,则用户代码可能永远无法完成。在这种情况下,必须调用 ICorDebugEval::Abort 才能继续该程序。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**CorDebug.idl
**库:**CorGuids.lib
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0