HOW TO:使用執行緒視窗
這個主題適用於:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro、Premium 和 Ultimate |
在 [執行緒] 視窗中,您可以檢查和處理正在偵錯之應用程式中的執行緒。
[執行緒] 視窗包含一張表格,其中的每個資料列都代表您應用程式中的執行緒。 這份表格預設會列出應用程式中的所有執行緒,但是您可以篩選清單,只顯示您感興趣的執行緒。 每個資料行都會包含不同類型的資訊。 您也可以隱藏部分資料行。 如果您顯示所有資料行,則會從左到右顯示下列資訊:
旗標資料行,您可以在其中標示想要特別注意的執行緒。 如需如何為執行緒加上旗標的詳細資訊,請參閱 HOW TO:將執行緒加上旗標和取消旗標。
使用中執行緒資料行,其中黃色箭號表示使用中執行緒。 箭號的外框表示執行進入偵錯工具的執行緒。
[ID] 資料行,內含每個執行緒的識別碼。
[Managed ID] 資料行,內含 Managed 執行緒的 Managed 識別碼。
[分類] 資料行,可將執行緒分類為使用者介面執行緒、遠端程序呼叫處理常式或背景工作執行緒。 特殊分類表示應用程式的主要執行緒。
[名稱] 資料行,可依據名稱識別每個執行緒 (如果有的話) 或識別為 [<沒有名稱>]。
[位置] 資料行,可顯示正在執行執行緒的位置。 您可以展開這個位置,以顯示執行緒的整個呼叫堆疊。
[優先權] 資料行,內含系統指派給每個執行緒的優先權或優先順序。
[關連遮罩] 資料行,為通常會隱藏的進階資料行。 這個資料行顯示每個執行緒的處理器關連遮罩。 在多處理器系統中,關連遮罩會決定可以執行執行緒的處理器。
[暫停] 資料行,內含暫停計數。 這個計數決定是否可以執行執行緒。 如需暫停計數的說明,請參閱本主題後面的<凍結和解除凍結執行緒>。
[處理序名稱] 資料行,內含每個執行緒所屬的處理序。 當您偵錯多個處理序時,這個資料行十分有用,但它通常是隱藏的。
若要在中斷模式或執行模式顯示執行序視窗
- 在 [偵錯] 功能表上,指向 [視窗],然後按一下 [執行緒]。
若要顯示或隱藏資料行
- 在 [執行緒] 視窗頂端的工具列中按一下 [資料行],然後選取或清除想要顯示或隱藏的資料行名稱。
若要切換使用中執行緒
執行下列任一步驟:
按兩下任一執行緒。
在執行緒上按一下滑鼠右鍵,並按一下 [切換至執行緒]。
黃色箭號會顯示在新的使用中執行緒旁邊。 箭號的灰色外框識別執行進入偵錯工具的執行緒。
群組和排序執行緒
當您群組執行緒時,標題會出現在每個群組的表格中。 標題包含群組描述 (例如 [背景工作執行緒] 或 [未標幟的執行緒]) 和樹狀目錄控制項。 每個群組的成員執行緒會出現在群組標題下方。 如果您想要隱藏群組的成員執行緒,則可以使用樹狀目錄控制項來摺疊該群組。
因為群組的優先順序高於排序,所以您可以依據分類這類項目來群組執行緒,然後依據每個分類內的 ID 來進行排序。
若要排序執行緒
在 [執行緒] 視窗頂端的工具列中,按一下任意資料行頂端的按鈕。
執行緒現在是依據該資料行中的值進行排序。
如果想要反轉排序次序,請再按一下相同按鈕。
出現在清單頂端的執行緒現在會出現在底端。
若要群組執行緒
- 在 [執行緒] 視窗工具列中,按一下 [群組依據] 清單,然後按一下想要做為執行緒群組依據的準則。
若要排序群組內的執行緒
在 [執行緒] 視窗頂端的工具列中,按一下 [群組依據] 清單,然後按一下想要做為執行緒群組依據的準則。
在 [執行緒] 視窗中,按一下任意欄頂端的按鈕。
執行緒現在是依據該資料行中的值進行排序。
若要展開或摺疊所有群組
- 在 [執行緒] 視窗頂端的工具列中,按一下 [展開群組] 或 [摺疊群組]。
搜尋特定執行緒
在 Visual Studio 2010 中,您可以搜尋符合所指定字串的執行緒。 當您在 [執行緒] 視窗中搜尋執行緒時,這個視窗會顯示所有符合任意資料行中之搜尋字串的執行緒。 該資訊包括 [位置] 資料行中出現在呼叫堆疊頂端的執行緒位置。 不過,預設不會搜尋整個呼叫堆疊。
若要搜尋特定執行緒
在 [執行緒] 視窗頂端的工具列中,移至 [搜尋] 方塊,並:
輸入搜尋字串,然後按 ENTER 鍵。
-或-
按一下 [搜尋] 方塊旁邊的下拉式清單,並從先前的搜尋中選取搜尋字串。
(選擇性) 若要將整個呼叫堆疊併入搜尋中,請選取 [搜尋呼叫堆疊]。
凍結和解除凍結執行緒
當您凍結執行緒時,即使有可用的資源,系統還是不會開始執行執行緒。
在機器碼中,您可以暫停或繼續執行緒,方法是呼叫 Windows 函式 SuspendThread 和 ResumeThread 或 MFC 函式 CWinThread::SuspendThread 和 CWinThread::ResumeThread。 如果您呼叫 SuspendThread 或 ResumeThread,則會變更 [執行緒] 視窗中顯示的「暫停計數」(Suspended Count)。 不過,如果您凍結或解除凍結原生執行緒,則不會變更暫停計數。 在機器碼中,除非將執行緒解除凍結,而且其暫停計數為零,否則無法執行執行緒。
在 Managed 程式碼中,凍結或解除凍結執行緒並不會變更暫停計數。 在 Managed 程式碼中,已凍結執行緒的暫停計數為 1。 在機器碼中,除非透過 SuspendThread 呼叫暫停執行緒,否則已凍結執行緒的暫停計數為 0。
注意事項 |
---|
當您偵錯機器碼對 Managed 程式碼的呼叫時,Managed 程式碼與呼叫它的機器碼會在相同的實體執行緒中執行。 暫止或凍結原生執行緒,也會凍結 Managed 程式碼。 |
若要凍結或解除凍結執行緒的執行
在 [執行緒] 視窗頂端的工具列中,按一下 [凍結執行緒] 或 [解除凍結執行緒]。
這個動作只會影響 [執行緒] 視窗中所選取的執行緒。
顯示執行緒呼叫堆疊以及切換框架
在多執行緒程式中,每個執行緒都會有它自己的呼叫堆疊。 [執行緒] 視窗則提供便利的方式來檢視這些堆疊。
若要檢視執行緒的呼叫堆疊
在 [位置] 資料行中,按一下執行緒位置旁邊的反轉三角形。
會展開這個位置,以顯示執行緒的呼叫堆疊。
若要檢視或摺疊所有執行緒的呼叫堆疊
- 在 [執行緒] 視窗頂端的工具列中,按一下 [展開呼叫堆疊] 或 [摺疊呼叫堆疊]。