CorDebug.idl 介面的先決條件
更新:2007 年 11 月
偵錯介面中的有些方法需要所偵錯的處理序 (即偵錯項目) 處於特定狀態,做為先決條件。此先決條件只適用於 CorDebug.idl 檔案中所宣告之介面的直接成員方法 (也就是說,只適用於非繼承自 IUnknown 的方法)。
偵錯項目的狀態
偵錯項目有六個高階狀態,在下列各節中加以描述。這些狀態中只有其中三個 (存留、同步處理和作業系統凍結) 是有效的。
存留
偵錯項目執行中的有效狀態。這是偵錯事件間的狀態。
同步處理
偵錯項目已停止且所有 Managed 狀態都是暫止的有效狀態。偵錯項目會透過兩個方式進入這個狀態:
在 Managed 偵錯事件之分派和繼續之間的間隔時。這是分派 Managed (或 In-Band、原生) 偵錯事件之後但在繼續此事件之前的期間。
在呼叫 ICorDebugController::Stop 方法之後。
作業系統凍結
偵錯項目在 Out-of-Band、原生偵錯事件時已停止的有效狀態。這個狀態只與 Interop 偵錯有關。
尚未初始化
偵錯項目尚未初始化的無效狀態。這個狀態存在於建立偵錯項目之後和分派 ICorDebugManagedCallback::CreateProcess 回呼之前的期間。如果在這個狀態期間呼叫 CorDebug.idl 中定義的方法,則會傳回 CORDBG_E_NOTREADY 的 HRESULT 值。
無作用或停用
偵錯項目已無法使用於偵錯的無效狀態。如果在這個狀態期間呼叫 CorDebug.idl 中定義的方法,則會傳回其中一個 HRESULT 值,包括 CORDBG_E_PROCESS_DETACHED 和 CORDBG_E_PROCESS_TERMINATED。
無法修復的錯誤
當分派 ICorDebugManagedCallback::DebuggerError 回呼時偵錯項目進入的無效狀態。這表示 Managed 偵錯服務已變成明顯損毀和無法使用。如果在這個狀態期間呼叫 CorDebug.idl 中定義的方法,則會傳回 CORDBG_E_UNRECOVERABLE_ERROR 的 HRESULT 值。
呼叫方法前的必要狀態
ICorDebug 介面的成員方法沒有超出其宣告之狀態特定的限制,因為它們不是直接存留於處理序物件上。所有其他介面的成員方法都有一些處理序特定的相似性。因此,這些方法需要偵錯項目處理序在呼叫時處於下列其中一種狀態:存留、同步處理或作業系統凍結。
當偵錯項目處於存留狀態時,可以呼叫下列方法:
當偵錯項目處於作業系統凍結狀態或同步處理狀態時,可以呼叫下列方法:
當偵錯項目處於同步處理狀態時,才能呼叫所有其他方法。否則會傳回 CORDBG_E_PROCESS_NOT_SYNCHRONIZED 的 HRESULT 值。