執行的控制權
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
偵錯引擎 (DE) 通常會傳送下列事件之一為最後一個啟動事件︰
項目點事件,如果附加到新啟動程式
載入完成事件,如果附加到已在執行中的程式
這兩個這些事件包括停止事件,這表示 DE 等候使用者回應透過 IDE。 如需詳細資訊,請參閱操作模式。
正在停止事件
當停止事件傳送到偵錯工作階段︰
包含目前指令指標的執行緒與程式可從此事件介面。
IDE 判斷目前的原始程式檔和位置,這會顯示在編輯器中反白顯示。
偵錯工作階段通常會回應此第一次停止事件所呼叫的程式繼續方法。
程式接著會執行,直到遇到停止條件,例如到達的中斷點,在其中案例 DE 將中斷點事件傳送至偵錯工作階段。 中斷點事件一次是停止事件,並 DE 再等候使用者回應。
如果使用者選擇,逐步執行,或與函式,IDE 會呼叫程式的偵錯工作階段提示
Step
方法,傳遞步驟 (指示、 陳述式或線條) 和步驟的類型的單位,也就是是否要逐步執行、 結束,或移到函式。 完成此步驟時,DE 會將偵錯工作階段,也就是停止事件步驟完成的事件。-或-
如果使用者選擇繼續執行,從目前指令指標時,IDE 會提示呼叫程式的偵錯工作階段Execute方法。 程式會繼續執行,直到遇到下一個停止條件。
-或-
如果偵錯工作階段是要忽略特定的停止事件,偵錯工作階段會呼叫程式的繼續方法。 如果程式逐步執行到、 不進入或離函式的停止條件發生時,它會繼續步驟。
以程式設計的方式,當 DE 遇到停止條件,它會傳送這類停止事件中的當做IDebugLoadCompleteEvent2或IDebugEntryPointEvent2到工作階段偵錯管理員 (SDM) 藉由IDebugEventCallback2介面。 DE 傳遞IDebugProgram2和IDebugThread2代表程式和執行緒,其中包含目前指令指標的介面。 SDM 呼叫IDebugThread2::EnumFrameInfo以取得最上層堆疊框架和呼叫IDebugStackFrame2::GetDocumentContext ,取得目前指令指標相關聯的文件內容。 此文件內容通常是原始程式碼的程式碼檔案名稱、 列及資料行號。 IDE 會使用這些來反白顯示,其中包含目前指令指標的原始程式碼。
SDM 通常會回應此第一次停止事件藉由呼叫IDebugProgram2::Continue。 然後會在程式執行,直到遇到停止條件,例如到達的中斷點時,將案例 DE 傳送IDebugBreakpointEvent2 介面到 SDM。 中斷點事件一次是停止事件,並 DE 再等候使用者回應。
如果使用者選擇,逐步執行,或與函式,IDE 會封鎖呼叫 SDM IDebugProgram2::Step,將它傳遞STEPUNIT (指示、 陳述式或線條) 和STEPKIND,也就是是否要逐步執行、 結束,或移到函式。 完成此步驟時,會傳送 DE IDebugStepCompleteEvent2 SDM,也就是停止事件的介面。
如果使用者選擇繼續執行,從目前指令指標時,IDE 會要求呼叫 SDM IDebugProgram2::Execute。 程式會繼續執行,直到遇到下一個停止條件。
如果偵錯封裝来忽略特定的停止事件時,偵錯封裝呼叫 SDM,它會呼叫IDebugProgram2::Continue。 如果程式逐步執行到、 不進入或離函式的停止條件發生時,它會繼續步驟。 這表示程式會維護逐步執行狀態,讓它知道如何繼續執行。
SDM 對呼叫Step
, Execute,和繼續都是非同步的這表示 SDM 預期能夠快速傳回呼叫。 如果 DE 傳送 SDM 停止事件之前的相同執行緒上Step
, Execute,或繼續傳回 SDM 停止回應。