偵錯會話和執行模型

偵錯工具引擎可以同時偵錯多個目標。 偵錯 會話 會在引擎取得目標並繼續進行,直到捨棄所有目標為止。 當目標正在執行且在目前目標暫停時可存取偵錯會話。 當會話可供存取時,引擎只能用來檢查及操作目標。

偵錯工具的主要迴圈通常包含設定執行狀態、呼叫 WaitForEvent 方法並處理產生的 事件。 呼叫 WaitForEvent 時,會話會變成無法存取。

當目標中發生事件時,引擎會暫停所有目標,而會話會變成可存取。 引擎接著會通知事件的事件回呼,並遵循事件篩選規則。 事件回呼和事件篩選準則會決定目標中的執行方式。 如果它們判斷引擎應該中斷偵錯工具, WaitForEvent 方法會傳回 ,而且會話仍可存取;否則,引擎會以事件回呼和事件篩選準則所決定的方式繼續執行目標,而會話會再次變成無法存取。

特別是 WaitForEvent 呼叫的持續時間,同時通知事件回呼並處理篩選規則--引擎處於稱為「等候內部」的狀態。 處於此狀態時,無法呼叫 WaitForEvent (它不會重新進入) 。

在目標中起始執行有兩個步驟:設定執行狀態,然後呼叫 WaitForEvent。 您可以使用 SetExecutionStatus 方法來設定執行狀態,或執行設定執行狀態的偵錯工具命令,例如 g (Go) p (Step)

如果一連串偵錯工具命令一起執行,例如「g ; ?@$ip「--如果該命令不是序列中最後一個命令,則需要在目標中執行的任何命令之後,就會發生 隱含等候 。 偵錯工具引擎處於「等候內部」狀態時,無法發生隱含等候;在此情況下,命令的執行將會停止,而目前的命令,也就是嘗試造成隱含等候的命令,將會解譯為指示目標中的執行應該如何繼續。 其餘的命令將會被捨棄。

注意 判斷會話是否可供存取或無法存取時,例如,引擎會將逐步執行) 視為執行目標 (有限。 當有限的執行完成時,會話就會變成可存取。

主機引擎

從遠端偵錯時,您可以使用偵錯工具引擎的多個實例。 這其中一個實例完全維護偵錯會話;這個實例稱為 主機引擎

所有偵錯工具作業都是相對於主機引擎,例如符號載入和延伸模組載入。