控制目標
當您在使用者模式中偵錯目標應用程式,或核心模式中的目標計算機時,目標可以 執行 或 停止。
當調試程式連線到核心模式目標時,調試程式會離開執行目標,除非您使用 -b命令行選項,否則目標系統已停止回應 (,也就是當 機) ,或目標系統仍因為先前的核心偵錯動作而停止。
當調試程式啟動或連線到使用者模式目標時,除非使用 -g 命令行選項,否則調試程式會立即停止目標。 如需詳細資訊,請參閱 初始斷點。
當目標正在執行時
當目標執行時,大部分調試程式動作都無法使用。
如果您想要停止執行中的目標,可以發出 Break 命令。 此命令會使調試程式 進入目標。 也就是說,調試程式會停止目標,並將所有控件提供給調試程式。 應用程式可能不會立即中斷。 例如,如果所有線程目前正在執行系統程式代碼,或處於等候作業中,則只有在控件傳回應用程式程式代碼之後,應用程式才會中斷。
如果執行中的目標遇到例外狀況,如果發生特定 事件 、叫用 斷點 ,或應用程式正常關閉,則目標 會中斷至調試程式。 此動作會停止目標,並將所有控制權提供給調試程式。 訊息會出現在 [調試程式命令] 視窗中 ,並描述錯誤、事件或斷點。
當目標停止時
若要啟動或控制目標的執行,您可以執行下列動作:
若要讓應用程式開始執行,請發出 Go 命令。
若要一次逐步執行應用程式一個指令,請使用 [ 逐步執行 ] 或 [ 逐步執行 ] 命令。 如果函式呼叫發生, 「逐步 執行」會進入函式,並繼續逐步執行每個指令。 Step Over 會將函式呼叫視為單一步驟。 當調試程式處於 元件模式時,一次執行一部機器指令。 當調試程式處於 來源模式時,一次執行一個來源行。
若要完成目前的函式,並在傳回發生時停止,請使用 [跳出 ] 或 [ 追蹤] 和 [監看 式] 命令。 Step Out 命令會繼續執行,直到目前的函式結束為止。 追蹤和監看會 繼續直到目前的函式結束,並同時顯示函式呼叫的摘要。 不過,您必須在有問題的函式第一個指令上發出 Trace 和 Watch 命令。
如果發生例外狀況,您可以使用 Go 搭配已處理例外 狀況和 未處理例外 狀況的 Go 命令繼續執行,並控制例外狀況的狀態。 (如需例外狀況的詳細資訊,請參閱 控制例外狀況和事件。)
(WinDbg 只會) 如果您在 [反組譯 碼] 視窗或 [來源] 視窗中 選取一行,然後使用 [ 執行至數據指標 ] 命令,程式就會執行直到遇到選取的行為止。
(使用者模式) 若要關閉目標應用程式並從頭重新啟動,請使用 [重新啟動 ] 命令。 您只能搭配調試程式建立的進程使用此命令。 重新啟動進程之後,它會立即中斷至調試程式。
(WinDbg) 若要關閉目標應用程式並清除調試程式,請使用 [停止偵 錯] 命令。 此命令可讓您開始偵錯不同的目標。
命令表單
啟動或控制目標執行的大部分命令都以文字命令、功能表命令、工具列按鈕和快捷鍵的形式存在。 作為基本文字命令,您可以在CDB、KD 或 WinDbg 中使用這些命令。 (命令的文字格式經常支援其他選項,例如變更程式計數器的位置,或執行固定數目的指令。) 您可以使用 WinDbg 中的功能表命令、工具列按鈕和快捷鍵。
您可以使用下列表單中的命令。
命令 | WinDbg 命令 | WinDbg 快速鍵 | 效果 |
---|---|---|---|
偵錯 |執行至數據指標 |
F7 CTRL + F10 |
(WinDbg 只會) 執行,直到到達游標標記的行為止。 |
|
偵錯 |停止偵錯 |
SHIFT + F5 |
停止所有偵錯並關閉目標。 |
|
僅 (CDB/KD) CTRL+C |
偵錯 |打破 |
CTRL + BREAK |
執行會停止,調試程式會中斷為目標。 |
偵錯 |重新啟動 |
CTRL + SHIFT + F5 |
(使用者模式只會) 重新啟動目標應用程式。 |
|
偵錯 |去 |
F5 |
目標會自由執行。 |
|
在 條件斷點之後繼續執行。 |
|||
偵錯 |Go 已處理例外狀況 |
與 g (Go) 相同,但目前的例外狀況會被視為已處理。 |
||
偵錯 |未處理的例外狀況 |
與 g (Go) 相同,但目前的例外狀況會視為未處理。 |
||
偵錯 |跳出 |
SHIFT + F11 |
目標會執行,直到目前的函式完成為止。 |
|
偵錯 |逐步執行 |
F10 |
目標會執行一個指令。 如果這個指令是函數調用,該函式會以單一步驟執行。 |
|
目標會執行,直到到達指定的地址為止。 此函式中的所有步驟都會 (顯示,但呼叫函式中的步驟不會) 。 |
|||
目標會執行到下一個 呼叫 指令為止。 如果目前的指令是 呼叫 指令,則會完全執行此呼叫,並持續執行直到下一個 呼叫為止。 |
|||
目標會執行,直到到達 呼叫 指令或 傳回 指令為止。 |
|||
目標會執行到任何類型的分支指令,包括條件式或無條件分支、呼叫、傳回和系統呼叫。 |
|||
目標會執行直到到達 傳回 指令為止。 |
|||
偵錯 |逐步執行 |
F11 F8 |
目標會執行一個指令。 如果這個指令是函數調用,調試程式會追蹤該呼叫。 |
|
目標會執行,直到到達指定的地址為止。 會顯示此函式和所呼叫函式中的所有步驟。 |
|||
(除了核心模式以外的所有模式,只有在目標) 以 x86 為基礎的系統上執行,直到達到下一個分支指令為止。 |
|||
目標會執行到下一個 呼叫 指令為止。 如果目前的指令是 呼叫 指令,則會追蹤指令,直到到達新的 呼叫 為止。 |
|||
目標會執行,直到到達 呼叫 指令或 傳回 指令為止。 如果目前的指令是 呼叫 指令或 傳回 指令,則會追蹤指令,直到到達新的 呼叫 或 傳回 為止。 |
|||
目標會執行,直到到達任何類型的分支指令,包括條件式或無條件分支、呼叫、傳回和系統呼叫。 如果目前的指令是分支指令,則會追蹤指令,直到到達新的分支指令為止。 |
|||
目標會執行,直到到達 傳回 指令為止。 如果目前的指令是 傳回 指令,則會追蹤指令,直到到達新的 傳回 為止。 |
|||
目標會執行到整個指定函式完成為止。 接著會顯示統計數據。 |
如需如何重新啟動目標計算機的詳細資訊,請參閱 當機和重新啟動目標計算機。
命令列選項
如果您不想讓應用程式在啟動或載入時立即停止,請使用CDB或 WinDbg 搭配 -g 命令行選項。 如需這種情況的詳細資訊,請參閱 初始斷點。
CDB 和 WinDbg 也支援 -G命令行選項。 如果應用程式正確完成,此選項會導致偵錯會話結束。
下列命令會嘗試從開始到完成執行應用程式,而且只有在發生錯誤時,調試程式提示才會出現。
cdb -g -G ApplicationName
您可以使用 -pt命令列選項 來設定中斷逾時。在某些情況下,目標無法與調試程序通訊。 如果發出中斷命令,而且調試程式在此時間後無法中斷至目標,調試程式會顯示「中斷逾時」訊息。
此時,調試程式會停止嘗試中斷目標。 相反地,調試程式會暫停目標,並可讓您檢查 (,但無法控制目標應用程式) 。
默認逾時為 30 秒。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應