控制進程和執行緒
當您執行使用者模式偵錯時,會啟用、顯示、凍結、取消凍結、暫停和未暫停的進程和執行緒。
目前或作用中的進程是目前正在偵錯的進程。 同樣地, 目前 或 作用 中的執行緒是偵錯工具目前控制的執行緒。 許多偵錯工具命令的動作是由目前進程和執行緒的身分識別所決定。 目前的進程也會決定偵錯工具所使用的虛擬位址對應。
偵錯開始時,目前的進程是偵錯工具所附加的進程,或造成中斷偵錯工具的例外狀況。 同樣地,目前線程是偵錯工具附加至進程或造成例外狀況時作用中的執行緒。 不過,您可以使用偵錯工具來變更目前的進程和執行緒,以及凍結或取消凍結個別執行緒。
在核心模式偵錯中,進程和執行緒不受本節所述的方法控制。 如需如何在核心模式中操作進程和執行緒的詳細資訊,請參閱 變更內容。
顯示進程和執行緒
若要顯示進程和執行緒資訊,您可以使用下列方法:
| (進程狀態) 命令
~ (執行緒狀態) 命令
僅) [進程和執行緒] 視窗 (WinDbg
設定目前的進程和執行緒
若要變更目前的進程或執行緒,您可以使用下列方法:
|s (設定目前進程) 命令
~s (設定目前線程) 命令
僅) [進程和執行緒] 視窗 (WinDbg
凍結和暫停執行緒
偵錯工具可以 暫停 執行緒或 凍結 執行緒,來變更執行緒的執行。 這兩個動作有一些不同的效果。
每個執行緒都有與其相關聯的 暫停計數 。 如果這個計數是一或更大的,系統就不會執行執行緒。 如果計數為零或更低,系統會在適當時執行執行緒。
一般而言,每個執行緒都有零的暫停計數。 當偵錯工具附加至進程時,它會將進程中的所有線程暫停計數遞增一個。 如果偵錯工具與進程中斷連結,它會遞減所有暫停計數一次。 當偵錯工具執行進程時,它會暫時遞減所有暫停計數一次。
您可以使用下列方法來控制偵錯工具中任何執行緒的暫停計數:
~n (Suspend Thread) 命令會將指定的執行緒暫停計數遞增一個。
~m (Resume Thread) 命令會將指定的執行緒暫停計數遞減一。
這些命令最常見的用法是從一到兩個,引發特定執行緒的暫停計數。 當偵錯工具執行或中斷連結進程時,執行緒接著會有一個暫停計數,而且即使進程中的其他執行緒正在執行,仍會暫停。
即使您正在執行 非vasive 偵錯,您也可以暫停執行緒。
偵錯工具也可以 凍結 執行緒。 此動作類似于以某種方式暫停執行緒。 不過,「凍結」只是偵錯工具設定。 Windows 作業系統中的任何專案都無法辨識此執行緒的任何不同。
根據預設,所有線程都是 unfrozen。 當偵錯工具造成進程執行時,凍結的執行緒不會執行。 不過,如果偵錯工具與進程中斷連結,則所有線程都會取消凍結。
若要凍結和解除凍結個別執行緒,您可以使用下列方法:
~f (凍結執行緒) 命令會凍結指定的執行緒。
~u (Unfreeze 執行緒) 命令會取消凍結指定的執行緒。
在任何事件中,屬於目標進程的執行緒永遠不會在偵錯工具中斷為目標時執行。 只有在偵錯工具執行進程或中斷連結時,執行緒的暫停計數才會影響執行緒的行為。 凍結狀態只會在偵錯工具執行進程時影響執行緒的行為。
其他命令中的執行緒和進程
您可以在許多其他命令之前新增執行緒規範或進程規範。 如需詳細資訊,請參閱個別命令主題。
您可以在許多命令和擴充命令之前,新增 ~e (執行緒特定命令) 限定詞。 此限定詞會導致命令在指定的執行緒上執行。 如果您想要將命令套用至多個執行緒,此限定詞特別有用。 例如,下列命令會針對正在偵錯的每個執行緒重複 !gle 擴充功能命令。
~*e !gle
多個系統
偵錯工具可以同時附加至多個目標。 當這些進程包含傾印檔案,或包含多個電腦上的即時目標時,偵錯工具會針對每個動作參考系統、進程和執行緒。 如需這類偵錯的詳細資訊,請參閱 偵錯多個目標。