控制目標

當您在使用者模式中偵錯目標應用程式,或核心模式中的目標計算機時,目標可以 執行停止

當調試程式連線到核心模式目標時,調試程式會離開執行目標,除非您使用 -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

執行會停止,調試程式會中斷為目標。

.restart (重新啟動目標應用程式)

偵錯 |重新啟動

CTRL + SHIFT + F5

(使用者模式只會) 重新啟動目標應用程式。

g (Go)

偵錯 |去

F5

目標會自由執行。

gc (Go 從條件斷點)

條件斷點之後繼續執行。

gh (Go,並已處理例外狀況)

偵錯 |Go 已處理例外狀況

g (Go) 相同,但目前的例外狀況會被視為已處理。

gn (Go,但例外狀況未處理)

偵錯 |未處理的例外狀況

g (Go) 相同,但目前的例外狀況會視為未處理。

gu (Go Up)

偵錯 |跳出

SHIFT + F11

目標會執行,直到目前的函式完成為止。

p (步驟)

偵錯 |逐步執行

F10

目標會執行一個指令。 如果這個指令是函數調用,該函式會以單一步驟執行。

pa (解決步驟)

目標會執行,直到到達指定的地址為止。 此函式中的所有步驟都會 (顯示,但呼叫函式中的步驟不會) 。

pc (下一個呼叫) 的步驟

目標會執行到下一個 呼叫 指令為止。 如果目前的指令是 呼叫 指令,則會完全執行此呼叫,並持續執行直到下一個 呼叫為止。

pct (下一個呼叫或傳回)

目標會執行,直到到達 呼叫 指令或 傳回 指令為止。

ph (下一個分支指示的步驟)

目標會執行到任何類型的分支指令,包括條件式或無條件分支、呼叫、傳回和系統呼叫。

pt (下一步傳回)

目標會執行直到到達 傳回 指令為止。

t (追蹤)

偵錯 |逐步執行

F11

F8

目標會執行一個指令。 如果這個指令是函數調用,調試程式會追蹤該呼叫。

ta (追蹤至位址)

目標會執行,直到到達指定的地址為止。 會顯示此函式和所呼叫函式中的所有步驟。

tb (追蹤至下一個分支)

(除了核心模式以外的所有模式,只有在目標) 以 x86 為基礎的系統上執行,直到達到下一個分支指令為止。

tc (追蹤至下一個呼叫)

目標會執行到下一個 呼叫 指令為止。 如果目前的指令是 呼叫 指令,則會追蹤指令,直到到達新的 呼叫 為止。

tct (追蹤至下一個呼叫或傳回)

目標會執行,直到到達 呼叫 指令或 傳回 指令為止。 如果目前的指令是 呼叫 指令或 傳回 指令,則會追蹤指令,直到到達新的 呼叫傳回 為止。

th (Trace to Next Branching Instruction)

目標會執行,直到到達任何類型的分支指令,包括條件式或無條件分支、呼叫、傳回和系統呼叫。 如果目前的指令是分支指令,則會追蹤指令,直到到達新的分支指令為止。

tt (追蹤至下一個傳回)

目標會執行,直到到達 傳回 指令為止。 如果目前的指令是 傳回 指令,則會追蹤指令,直到到達新的 傳回 為止。

wt (追蹤和監看數據)

目標會執行到整個指定函式完成為止。 接著會顯示統計數據。

如需如何重新啟動目標計算機的詳細資訊,請參閱 當機和重新啟動目標計算機

命令列選項

如果您不想讓應用程式在啟動或載入時立即停止,請使用CDB或 WinDbg 搭配 -g 命令行選項。 如需這種情況的詳細資訊,請參閱 初始斷點

CDB 和 WinDbg 也支援 -G命令行選項。 如果應用程式正確完成,此選項會導致偵錯會話結束。

下列命令會嘗試從開始到完成執行應用程式,而且只有在發生錯誤時,調試程式提示才會出現。

cdb -g -G ApplicationName 

您可以使用 -pt命令列選項 來設定中斷逾時。在某些情況下,目標無法與調試程序通訊。 如果發出中斷命令,而且調試程式在此時間後無法中斷至目標,調試程式會顯示「中斷逾時」訊息。

此時,調試程式會停止嘗試中斷目標。 相反地,調試程式會暫停目標,並可讓您檢查 (,但無法控制目標應用程式) 。

默認逾時為 30 秒。