共用方式為


控制目標

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

當調試程式連線到內核模式目標時,調試程式會離開目標執行,除非您使用 -b命令行選項,否則目標系統已停止回應(也就是 當機),或目標系統仍然因為先前的核心偵錯動作而停止。

當調試程式啟動或連線到使用者模式目標時,調試程式會立即停止目標,除非您使用 -g 命令行選項。 如需詳細資訊,請參閱 初始斷點

當目標正在執行時

當目標執行時,大部分的調試程式動作都無法使用。

如果您想要停止執行中的目標,您可以發出 Break 命令。 這個指令會使除錯程式 進入目標。 也就是說,除錯工具會停止目標,並將所有控制權交給除錯工具。 應用程式可能不會立即中斷。 例如,如果所有線程目前正在執行系統程式代碼,或處於等候作業中,則應用程式只會在控件傳回至應用程式的程式碼之後中斷。

如果執行中的目標遇到例外狀況、如果發生某些 事件、如果斷點 被觸發 或如果應用程式正常關閉,則目標 進入除錯程式。 此動作會停止目標,並將所有控件提供給調試程式。 在 除錯器命令視窗中會出現一則訊息, 並描述錯誤、事件或斷點。

當目標停止時

若要啟動或控制目標的執行,您可以執行下列動作:

  • 若要讓應用程式開始執行,請發出 Go 命令。

  • 若要逐一逐步執行應用程式,請使用 Step IntoStep Over 命令。 如果發生函數呼叫,Step Into 進入該函式並繼續逐步執行每個指令。 越過 將函式呼叫視為單一步驟。 當調試程式處於 組合語言模式時,逐步執行會一次執行一條機器指令。 當除錯器處於 來源模式時,每次將逐行執行來源代碼。

  • 若要完成目前的函式,並在傳回發生時停止,請使用 Step Out追踪與監視 命令。 Step Out 命令會繼續執行,直到目前的函式結束為止。 追蹤和監看功能 將繼續,直到目前的函式結束,並且也會顯示函式呼叫的完整摘要。 不過,您必須在相關函式的第一個指令上發出 追蹤和監看 命令。

  • 如果發生例外狀況,您可以使用 Go 搭配例外狀況已處理 命令,或使用 Go 搭配例外狀況未處理 命令,繼續執行並控制例外狀況的狀態。 (如需例外狀況的詳細資訊,請參閱 控制例外狀況和事件

  • (僅限 WinDbg)如果您在 [反組譯碼] 視窗中選取一行[來源] 視窗,然後使用 Run to Cursor 命令,程式就會執行,直到它遇到選取的行為止。

  • (僅限使用者模式)若要關閉目標應用程式並從頭重新啟動,請使用 [重新啟動 ] 命令。 您只能搭配調試程式建立的進程使用此命令。 重新啟動程序之後,它會立即中斷至調試程式。

  • (僅限 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)

在條件式斷點 之後繼續執行

gh (已處理例外狀況的 Go)

偵錯 | Go 已處理例外狀況

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

gn (未處理例外狀況的 Go)

偵錯 | 切換至未處理的例外

g (Go)相同,不同之處在於目前的例外狀況會被視為未處理。

古(上去)

偵錯 |跳出

SHIFT + F11

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

p (步驟)

偵錯 |逐步執行

F10

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

pa (解決步驟)

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

電腦 (下一步呼叫)

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

pct (進入下一步呼叫或返回)

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

ph(移至下個分支指令的步驟)

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

pt (下一步返回)

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

t (追蹤)

偵錯 | 單步進入

F11

F8

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

ta (追蹤至位址)

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

tb (追蹤至下一個分支)

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

tc (追蹤到下一個呼叫)

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

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

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

(追蹤至下一個分支指示)

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

tt (追蹤至下次返回)

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

wt (追蹤和監控數據)

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

如需如何重新啟動目標電腦的詳細資訊,請參閱 當機並重新啟動目標電腦

命令列選項

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

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

下列命令會嘗試從頭到尾執行應用程式,而且調試程式提示只會在發生錯誤時出現。

cdb -g -G ApplicationName 

您可以使用 -pt命令行選項 來設定中斷逾時。在某些情況下,可能會使目標無法與調試程序通訊。 若下達中斷指令,且在此時間後調試器無法中斷進入目標,調試器將顯示「中斷逾時」訊息。

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

默認逾時為 30 秒。