公共语言运行时 (CLR) 调试 API 支持在运行时环境中进行调试。 下面是如何调试运行时进程的逐步说明:
调试器创建 ICorDebug 接口的实例。 调试器通过使用 CLSID CLSID_CorDebug 调用 CComPtrBase::CoCreateInstance 来获取 ICorDebug 的实例。
调试器通过调用 ICorDebug::Initialize 方法初始化调试 API。
调试器注册托管事件处理程序。 调试器调用 ICorDebug::SetManagedHandler 方法来注册 ICorDebugManagedCallback 接口的实例,作为用于接收通知和有关托管代码中的事件的信息的回调。
调试器根据情况注册非托管事件处理程序。 如果调试器需要调试非托管代码,它将调用 ICorDebug::SetUnmanagedHandler 方法来注册 ICorDebugUnmanagedCallback 的实例,作为用于接收通知和有关非托管代码中的事件的信息的回调。
调试器创建调试对象进程。 调试器调用 ICorDebug::CreateProcess 方法来创建进程。
调试 API 将有关新调试对象进程的信息通知调试器。 调试 API 调用 ICorDebugManagedCallback 方法,从 ICorDebugManagedCallback::CreateProcess 开始。 然后,可能接着调用 ICorDebugManagedCallback::LoadModule、ICorDebugManagedCallback::LoadClass、ICorDebugManagedCallback::CreateThread,诸如此类。
调试器停止调试。 在某一时刻,调试器将获取 ICorDebugManagedCallback::ExitProcess 事件,指示调试对象不再执行。 之后的某一时刻,调试器将释放对它拥有的任何接口的所有引用,然后调用 ICorDebug::Terminate 方法。