共用方式為


控制執行

偵錯引擎 (DE) 通常會傳送下列其中一個事件作為最後一個啟動事件:

  • 如果連結至新啟動的程式,則為進入點事件

  • 如果連結至已執行的程式,則為載入完成事件

    這兩個事件都是停止事件,這表示 DE 會透過 IDE 等候使用者的回應。 如需詳細資訊,請參閱作業模式

停止事件

當停止事件傳送至偵錯工作階段時:

  1. 您可以從事件介面取得包含目前指令指標的程式和執行緒。

  2. IDE 會決定目前的原始碼檔案和位置,它會在編輯器中以醒目提示顯示。

  3. 偵錯工作階段通常會呼叫程式的 Continue 方法,以回應此第一個停止事件。

  4. 然後程式會執行,直到遇到停止狀況為止,例如到達中斷點。 在此情況下,DE 會將中斷點事件傳送至偵錯工作階段。 中斷點事件是停止事件,DE 會再次等候使用者回應。

  5. 如果使用者選擇逐步執行、跳過或退出函式,IDE 會提示偵錯工作階段呼叫程式的 Step 方法。 然後,IDE 會傳遞步驟的單位 (指令、陳述式或行) 和步驟類型 (是要逐步執行、跳過或退出函式)。 當步驟完成時,DE 會將步驟完成事件傳送至偵錯工作階段,也就是停止事件。

    -或-

    如果使用者選擇從目前的指令指標繼續執行,IDE 會提示偵錯工作階段呼叫程式的 Execute 方法。 程序會繼續執行,直到它遇到下一個停止狀況為止。

    -或-

    如果偵錯工作階段要忽略特定的停止事件,偵錯工作階段會呼叫程式的 Continue 方法。 如果程式在遇到停止狀況時正逐步執行、跳過或退出函式,則會繼續執行步驟。

    就程序設計而言,當 DE 遇到停止狀況時,它會透過 IDebugEventCallback2 介面將 IDebugLoadCompleteEvent2IDebugEntryPointEvent2 這類停止事件傳送至工作階段偵錯管理員 (SDM)。 DE 會傳遞代表包含目前指令指標的程式和執行緒的 IDebugProgram2IDebugThread2 介面。 SDM 會呼叫 IDebugThread2::EnumFrameInfo 來取得上層堆疊框架,並呼叫 IDebugStackFrame2::GetDocumentContext 來取得與目前指令指標相關聯的文件內容。 此文件內容通常是原始程式碼檔名、行號和資料行編號。 IDE 會使用這些來醒目提示包含目前指令指標的原始程式碼。

    SDM 通常會呼叫 IDebugProgram2::Continue 來回應此第一個停止事件。 然後程式會執行,直到遇到停止狀況,例如到達中斷點,在此情況下,DE 會將 IDebugBreakpointEvent2 介面傳送至 SDM。 中斷點事件是停止事件,DE 會再次等候使用者回應。

    如果使用者選擇逐步執行、跳過或移出函式,IDE 會提示 SDM 呼叫 IDebugProgram2::Step。 IDE 接著會傳遞 STEPUNIT (指令、陳述式或行) 和 STEPKIND,也就是要逐步執行、跳過還是退出函式。 當步驟完成時,DE 會將 IDebugStepCompleteEvent2 介面傳送至 SDM,此為停止事件。

    如果使用者選擇從目前的指令指標繼續執行,IDE 會要求 SDM 呼叫 IDebugProgram2::Execute。 程序會繼續執行,直到它遇到下一個停止狀況為止。

    如果偵錯套件要忽略特定的停止事件,偵錯套件會呼叫 SDM,其會呼叫 IDebugProgram2::Continue。 如果程式在遇到停止狀況時正逐步執行、跳過或退出函式,它會繼續執行步驟。 這表示程式會維護逐步執行狀態,而知道如何繼續。

    SDM 對 StepExecuteContinue 所做的呼叫是非同步,這表示 SDM 預期呼叫會快速傳回。 如果 DE 在 StepExecuteContinue 傳回之前在相同執行緒上傳送停止事件給 SDM,則 SDM 會停止回應。