啟動程式
想要對程式進行偵錯的使用者可以按 F5 從 IDE 執行偵錯工具。 這會展開一系列事件,最終導致 IDE 連線到偵錯引擎 (DE),轉而連線或連結至程式,如下所示:
IDE 會先呼叫專案套件,以取得解決方案的作用中專案偵錯設定。 這些設定包括起始目錄、環境變數、程式將執行的所在連接埠,以及用來建立程式的 DE (若有指定)。 這些設定會傳遞至偵錯套件。
如果指定 DE,DE 會呼叫作業系統來啟動程式。 因為啟動了程式,程式的執行階段環境會載入。 例如,如果程式是以 MSIL 撰寫,則會叫用 Common Language Runtime 來執行程式。
-或-
如果未指定 DE,連接埠會呼叫作業系統來啟動程式,這會導致程式的執行階段環境載入。
注意
如果使用 DE 來啟動程式,很可能將相同的 DE 連結至程式。
根據啟動程式的是 DE 還是連接埠,DE 或執行階段環境接著會建立程式描述或節點,並通知程式正在執行的連接埠。
注意
建議由執行階段環境建立程式節點,因為程式節點是可偵錯之程式的輕量型表示。 不需要載入整個 DE,只要建立並註冊程式節點即可。 如果 DE 是設計成在 IDE 程式中執行,但實際上沒有 IDE 在執行中,則必須有一個元件可以將程式節點新增至連接埠。
新建立的程式,連同任何其他程式 (相關或無關,已啟動或連接至相同的 IDE),會撰寫偵錯工作階段。
就程式設計而言,當使用者第一次按下 F5 時,Visual Studio 的偵錯套件會透過 DebugLaunch 方法呼叫專案套件 (與啟動的程式類型相關聯),進而填入 VsDebugTargetInfo2 結構,其中包含解決方案的作用中專案偵錯設定。 這個結構會透過對 LaunchDebugTargets2 方法的呼叫傳回至偵錯套件。 偵錯套件接著會具現化工作階段偵錯管理員 (SDM),這會啟動正在偵錯的程式,以及任何相關聯的偵錯引擎。
傳遞至 SDM 的其中一個引數是用來啟動程式的 DE GUID。
如果 DE GUID 不是
GUID_NULL
,SDM 會共同建立 DE,然後呼叫其 LaunchSuspended 方法來啟動程式。 例如,如果程式是以機器碼撰寫,IDebugEngineLaunch2::LaunchSuspended
可能會呼叫CreateProcess
和ResumeThread
(Win32 函式) 來執行程式。因為啟動了程式,程式的執行階段環境會載入。 DE 或執行階段環境接著會建立 IDebugProgramNode2 介面來描述程式,並將此介面傳遞至 AddProgramNode,以通知程式正在執行的連接埠。
如果傳遞了
GUID_NULL
,則連接埠會啟動程式。 執行程式之後,執行階段環境會建立IDebugProgramNode2
介面來描述程式,並將它傳遞至IDebugPortNotify2::AddProgramNode
。 這會通知程式正在執行的連接埠。 然後 SDM 會將偵錯引擎連結至執行中的程式。
本節內容
通知連接埠說明啟動程式並通知連接埠之後會發生什麼情況。
啟動後連結記錄偵錯工作階段何時準備好將 DE 連結至程式。
相關內容
- 偵錯工作包含各種偵錯工作的連結,例如啟動程式及評估運算式。