共用方式為


控制進程和線程

當您執行使用者模式偵錯時,您會啟動、顯示、凍結、解除凍結、暫停和取消暫停進程和線程。

當前活躍 進程是目前正在偵錯的進程。 同樣地,目前作用中 線程是調試程式目前控制的線程。 許多調試程式命令的動作是由目前進程和線程的身分識別所決定。 目前的進程也會決定調試程式所使用的虛擬位址對應。

偵錯開始時,目前的進程是偵錯工具所附加的進程,或者是導致偵錯工具中斷的例外狀況。 同樣地,目前的線程是調試程式附加至進程或造成例外狀況時作用中的線程。 不過,您可以使用調試程式來變更目前的進程和線程,以及凍結或解除凍結個別線程。

在內核模式偵錯中,進程和線程不受本節中所述的方法所控制。 如需了解在核心模式中如何處理程序和線程的詳細資訊,請參閱 變更內容

顯示進程和線程

若要顯示進程和線程資訊,您可以使用下列方法:

設定目前的進程和線程

若要變更目前的進程或線程,您可以使用下列方法:

凍結和暫停線程

調試程式可以藉由 暫停線程 線程,或 凍結線程,來變更線程的執行。 這兩個動作的效果有些不同。

每個線程都有一個與它相關聯的暫停計數 。 如果這個計數是一或更大的,則系統不會執行線程。 如果計數為零或更低,系統會在適當時執行線程。

一般而言,每個線程都有零的暫停計數。 當調試程式附加至進程時,它會將該進程中所有線程的暫停計數遞增一個。 如果調試程式與進程中斷連結,則會將所有暫停計數遞減一個。 當除錯器執行程序時,它會暫時地將所有暫停計數遞減一。

您可以使用下列方法,從除錯程式控制任何線程的暫停計數:

這些命令最常見的用法是將特定線程的暫停計數從一個提高到兩個。 當偵錯工具執行或從處理程序中分離時,即使該處理程序中的其他執行緒正在執行,該執行緒的暫停計數仍會是 1 並保持暫停狀態。

即使您執行 非侵入式偵錯,您仍可以暫停線程。

調試程式也可以凍結 線程。 此動作類似於以某種方式暫停線程。 不過,「凍結」只是調試程序設定。 在Windows作業系統中,沒有任何機制能辨識此線程與其他線程的任何不同。

根據預設,所有線程都會解除凍結。 當調試程式導致進程執行時,凍結的線程不會執行。 不過,如果調試程式與進程中斷連結,則所有線程都會解除凍結。

若要凍結和解除凍結個別線程,您可以使用下列方法:

在任何情況下,屬於目標程序的線程在除錯器中斷目標時永遠不會執行。 只有在調試程式執行進程或中斷連結時,線程的暫停計數才會影響線程的行為。 凍結狀態只會在調試程式執行進程時影響線程的行為。

其他命令中的線程和進程

您可以在許多其他命令之前新增線程規範或進程規範。 如需詳細資訊,請參閱個別命令主題。

您可以在許多命令和擴充命令之前,新增 ~e (Thread-Specific Command) 限定符。 這個限定符會使命令在指定的線程上執行。 如果您想要將命令套用至多個線程,此限定符特別有用。 例如,下列命令會針對正在偵錯的每個線程重複 !gle 擴充功能命令。

~*e !gle 

多個系統

偵錯器可以同時連接到多個目標。 當這些進程包含傾印檔案或在多部計算機上包含即時目標時,調試程式會參考每個動作的系統、進程和線程。 如需這類偵錯的詳細資訊,請參閱 偵錯多個目標