切換模式
當您 從核心偵錯工具控制使用者模式偵錯時,會遇到四種不同的模式,而且可以透過各種方式在兩者之間切換。
注意 在描述此案例中, 目標應用程式 是指正在偵錯的使用者模式應用程式, 目的電腦 是指包含目標應用程式和 CDB 或 NTSD 進程的電腦,而 主機電腦 則是指包含核心偵錯工具的電腦。
將遇到下列四種模式:
使用者模式偵錯
目的電腦和目標應用程式會凍結。 使用者模式偵錯提示會出現在核心偵錯工具的 [ 偵錯工具命令] 視窗中 。 在 WinDbg 中,WinDbg 視窗下方面板中的提示會顯示 [輸入 > ]。 您可以在此提示中輸入命令,就像是在使用者模式偵錯期間輸入命令一樣,分析目標應用程式的狀態,或造成它執行或逐步執行。 偵錯工具存取的符號檔、擴充 DLL 和其他檔案,將會是目的電腦上的這些檔案,而不是主機電腦上的檔案。
目標應用程式執行
目的電腦正在執行、目標應用程式正在執行,而且偵錯工具正在等候。 此模式與讓目標在一般偵錯中執行相同。
睡眠模式
目的電腦正在執行,但目標應用程式已凍結,而且兩個偵錯工具都會凍結。 如果您需要在目的電腦上執行某些動作,但不想變更偵錯會話的狀態,這個模式會很有用。
核心模式偵錯
目的電腦和目標應用程式會凍結。 核心模式偵錯提示 kd > 會出現在核心偵錯工具的 [偵錯工具命令] 視窗中。 此模式是典型的核心模式偵錯狀態。
會話會以使用者模式偵錯模式開始。 下列動作和事件會導致模式變更:
若要從使用者模式偵錯切換到目標應用程式執行,請在提示字元中使用 g (Go) 命令
Input>
。若要暫時從使用者模式偵錯切換到目標應用程式執行,然後返回使用者模式偵錯,請使用步驟、追蹤或其他暫時執行命令。 如需這類命令的清單,請參閱 控制目標。
若要從使用者模式偵錯切換到睡眠模式,請使用 .sleep (Pause Debugger) 命令。 此命令會計時。 當時間到期時,系統會返回使用者模式偵錯。
若要從使用者模式偵錯切換到核心模式偵錯,請使用 .breakin (Break to the Kernel Debugger) 命令。 請注意,如果呼叫進程沒有系統管理員許可權, .breakin 可能會因為存取遭拒錯誤而失敗。 在此情況下,請發出簡短 的 .sleep 命令並按 CTRL+C,切換至 KD。
您只能在特定環境中,從目標應用程式執行切換到使用者模式偵錯。 如果目的電腦正在執行 Microsoft Windows XP 或更新版本的 Windows 作業系統,您可以使用 !bpid 擴充功能命令。 如果您使用 CDB (不是 NTSD) ,您可以在目的電腦上啟動 CDB 視窗,然後按 CTRL+C。
如果目標應用程式遇到中斷點、遇到例外狀況、遇到一些其他受控制的事件,或結束,系統就會從目標應用程式執行切換到使用者模式偵錯。 您應該事先規劃這類事件,特別是當您使用 NTSD 時。 如需這些事件的詳細資訊,請參閱 使用中斷點 和控制 例外狀況和事件。
若要從目標應用程式執行切換至核心模式偵錯,請在 KD 視窗中按 CTRL+C、按 CTRL+BREAK 或按一下 WinDbg 視窗中 [偵錯] 功能表上的 [中斷],或在目的電腦鍵盤上按 SYSRQ 或 ALT+SYSRQ。 (如果您的核心偵錯工具是 KD,而且當您同步選取 CTRL+C 與使用者模式偵錯工具通訊時,使用者模式偵錯工具可能會擷取您按下 CTRL+C.)
如果偵錯工具發生核心錯誤,或如果您使用 Breakin.exe 工具,則系統會從目標應用程式執行切換到核心模式偵錯。
若要從睡眠模式切換到使用者模式偵錯,請等候睡眠時間到期、使用 -wake 命令列選項在目的電腦上啟動新的 CDB 進程,或使用目的電腦上不同 CDB 或 NTSD 複本中的 .wake (喚醒偵錯工具) 命令。
若要切換出核心模式偵錯,請在提示字元中使用 g (Go) 命令
kd>
。 此命令會傳回使用者模式偵錯或目標應用程式執行, (兩者中哪一個是最近使用的狀態) 。