CorDebug.idl 接口的前提条件

作为前提条件,调试接口中的某些方法要求正在调试的进程(即调试对象)处于某一状态下。 前提条件仅适用于在 CorDebug.idl 文件中声明的接口的直接成员方法。 (也就是说,它们仅适用于不是从 IUnknown 继承的方法。)

调试对象的状态

调试对象具有如下各节所述的六种高级状态。 这些状态中只有三种状态(活动、同步和操作系统冻结)有效。

活动

调试对象正在运行的一种有效状态。 这是调试事件之间的状态。

同步

一种有效状态,在这种状态下调试对象停止,并且所有托管状态都被挂起。 调试对象可通过以下两种方式之一进入此状态:

  • 托管调试事件的调度与继续之间的间隔期, 即调度托管(或带内本机)调试事件之后、事件继续之前的时段。

  • 调用 ICorDebugController::Stop 方法后。

操作系统冻结

调试对象在带外的本机调试事件中停止的有效状态。 此状态仅与互操作调试相关。

尚未初始化

调试对象尚未初始化的无效状态。 此状态存在于创建调试对象之后、调度 ICorDebugManagedCallback::CreateProcess 回调之前的时段。 如果在此状态期间调用在 CorDebug.idl 中定义的方法,则可能返回 HRESULT 值 CORDBG_E_NOTREADY。

出现故障或停用

一种无效状态,在此状态下无法再对调试对象进行调试。 如果在此状态期间调用在 CorDebug.idl 中定义的方法,则可能返回若干个 HRESULT 值(包括 CORDBG_E_PROCESS_DETACHED 和 CORDBG_E_PROCESS_TERMINATED)当中的一个。

不可恢复的错误

调度 ICorDebugManagedCallback::DebuggerError 回调时调试对象进入的无效状态。 这意味着托管调试服务已严重损坏且无法使用。 如果在此状态期间调用在 CorDebug.idl 中定义的方法,则可能返回 HRESULT 值 CORDBG_E_UNRECOVERABLE_ERROR。

调用方法之前所需的状态

除了声明以外,ICorDebug 接口的成员方法没有状态特定的限制,因为这些方法不直接依托进程对象。 所有其他接口的成员方法都具有某种特定于进程的关联。 因此,调用这些方法时需要调试对象进程处于下列三种状态之一:活动、同步或操作系统冻结。

调试对象处于活动状态时,可以调用下列方法:

调试对象处于操作系统冻结状态或同步状态时,可以调用下列方法:

只有当调试对象处于同步状态时,才应调用所有其他方法。 否则,这些方法可能返回 HRESULT 值 CORDBG_E_PROCESS_NOT_SYNCHRONIZED。

请参见

概念

CLR 调试概述

其他资源

调试接口

调试(非托管 API 参考)