使用適當的連接埠註冊程式之後,您必須將偵錯工具連結至您要偵錯的程式。
選擇連結方式
工作階段偵錯管理員 (SDM) 透過三種方式嘗試連結至進行偵錯的程式。
對於偵錯引擎透過 LaunchSuspended 方法啟動的程式 (例如,一般解譯的語言),SDM 會從已連結程式相關聯的 IDebugProgramNode2 物件取得 IDebugProgramNodeAttach2 介面。 如果 SDM 可以取得
IDebugProgramNodeAttach2介面,SDM 接著會呼叫 OnAttach 方法。IDebugProgramNodeAttach2::OnAttach方法會傳回S_OK,指出它未連結至程式,而且可以嘗試連結至程式。如果 SDM 可以從已連結程式取得 IDebugProgramEx2 介面,SDM 會呼叫 Attach 方法。 這種方法通常適用於連接埠提供者從遠端啟動的程式。
如果無法透過
IDebugProgramNodeAttach2::OnAttach或IDebugProgramEx2::Attach方法連結程式,SDM 會藉由呼叫CoCreateInstance函式,然後呼叫 Attach 方法,載入偵錯引擎 (如果尚未載入)。 這種方法通常適用於連接埠提供者在本機啟動的程式。自訂連接埠提供者也可以在自訂連接埠提供者的
IDebugProgramEx2::Attach方法實作中呼叫IDebugEngine2::Attach方法。 通常在此情況下,自訂連接埠提供者會在遠端電腦上啟動偵錯引擎。當工作階段偵錯管理員 (SDM) 呼叫 Attach 方法時,就會達成連結。
如果您在與要偵錯的應用程式同一個處理序中執行 DE,則必須實作下列 IDebugProgramNode2 方法:
-
呼叫
IDebugEngine2::Attach方法之後,請在IDebugEngine2::Attach方法實作中遵循下列步驟:
將 IDebugEngineCreateEvent2 事件物件傳送至 SDM。 如需詳細資訊,請參閱 傳送事件。
在傳遞至
IDebugEngine2::Attach方法的 IDebugProgram2 物件上呼叫 GetProgramId 方法。這會傳回用來識別程式的
GUID。GUID必須儲存在代表 DE 本機程式的物件中,而且必須在IDebugProgram2介面上呼叫IDebugProgram2::GetProgramId方法時傳回它。注意
如果您實作
IDebugProgramNodeAttach2介面,則會將程式的GUID傳遞至IDebugProgramNodeAttach2::OnAttach方法。 這個GUID會用於IDebugProgram2::GetProgramId方法所傳回的程式GUID。傳送 IDebugProgramCreateEvent2 事件物件,通知 SDM 已建立本機
IDebugProgram2物件以將程式呈現給 DE。 如需詳細資訊,請參閱傳送事件。注意
這與傳遞到
IDebugEngine2::Attach方法中的IDebugProgram2物件不同。 先前傳遞的IDebugProgram2物件只能由連接埠辨識,而且是不同的物件。