想要偵錯程式的使用者可以按 F5 從 IDE 執行偵錯工具。 這會開始一系列事件,最終導致 IDE 連線到偵錯引擎 (DE),而偵錯引擎又連線或附加到程式,如下所示:
IDE 會先呼叫專案套件,以取得解決方案的作用中專案偵錯設定。 這些設定包括起始目錄、環境變數、程式將在其中執行的埠,以及用來建立程式的 DE (如果指定)。 這些設定會傳遞至偵錯套件。
如果指定 DE,DE 會呼叫作業系統來啟動程式。 啟動程式後,程式的執行環境會被載入。 例如,如果程式是以 MSIL 撰寫,則會叫用共用語言執行階段來執行程式。
-或-
如果未指定 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則可能會呼叫CreateProcessandResumeThread(Win32 函式) 來執行程式。啟動程式後,會載入程式的執行時間環境。 然後,DE 或執行時間環境會建立 IDebugProgramNode2 介面來描述程式,並將此介面傳遞至 AddProgramNode ,以通知埠程式正在執行。
如果通過,則
GUID_NULL埠會啟動程式。 程式執行之後,執行時環境會建立一個IDebugProgramNode2介面來描述程式,並將它傳遞給IDebugPortNotify2::AddProgramNode。 這會通知埠該程式正在執行中。 然後,SDM 會將偵錯引擎附加至執行中的程式。
本節中
通知埠說明 啟動程式並通知埠之後會發生什麼情況。
當偵錯工作階段準備好將 DE 附加至程式時,在啟動文件之後附加。
相關內容
- 偵錯工作包含 各種偵錯工作的連結,例如啟動程式和評估運算式。