共用方式為


HOW TO:使用執行緒視窗

在 [執行緒] 視窗中,您可以檢查和處理正在偵錯之應用程式中的執行緒。

[執行緒] 視窗包含一張表格,其中的每個資料列都代表您應用程式中的執行緒。這份表格預設會列出應用程式中的所有執行緒,但是您可以篩選清單,只顯示您感興趣的執行緒。每個資料行都會包含不同類型的資訊。您也可以隱藏部分資料行。如果您顯示所有資料行,則會從左到右顯示下列資訊:

  • 旗標資料行,您可以在其中標示想要特別注意的執行緒。如需如何為執行緒加上旗標的詳細資訊,請參閱 HOW TO:將執行緒加上旗標和取消旗標

  • 使用中執行緒資料行,其中黃色箭號表示使用中執行緒。箭號的外框表示執行進入偵錯工具的執行緒。

  • [ID] 資料行,內含每個執行緒的識別碼。

  • [Managed ID] 資料行,內含 Managed 執行緒的 Managed 識別碼。

  • [分類] 資料行,可將執行緒分類為使用者介面執行緒、遠端程序呼叫處理常式或背景工作執行緒。特殊分類表示應用程式的主要執行緒。

  • [名稱] 資料行,可依據名稱識別每個執行緒 (如果有的話) 或識別為 [<沒有名稱>]。

  • [位置] 資料行,可顯示正在執行執行緒的位置。您可以展開這個位置,以顯示執行緒的整個呼叫堆疊。

  • [優先權] 資料行,內含系統指派給每個執行緒的優先權或優先順序。

  • [關連遮罩] 資料行,為通常會隱藏的進階資料行。這個資料行顯示每個執行緒的處理器關連遮罩。在多處理器系統中,關連遮罩會決定可以執行執行緒的處理器。

  • 暫止計數資料行,其中包含已暫止的計數。這個計數決定是否可以執行執行緒。如需暫停計數的說明,請參閱本主題後面的<凍結和解除凍結執行緒>。

  • [處理序名稱] 資料行,內含每個執行緒所屬的處理序。當您偵錯多個處理序時,這個資料行十分有用,但它通常是隱藏的。

若要在中斷模式或執行模式顯示執行序視窗

  • 在 [偵錯] 功能表上,指向 [視窗],然後按一下 [執行緒]。

若要顯示或隱藏資料行

  • 在 [執行緒] 視窗頂端的工具列中按一下 [資料行],然後選取或清除想要顯示或隱藏的資料行名稱。

若要切換使用中執行緒

  • 執行下列任一步驟:

    • 按兩下任一執行緒。

    • 在執行緒上按一下滑鼠右鍵,並按一下 [切換至執行緒]。

      黃色箭號會顯示在新的使用中執行緒旁邊。箭號的灰色外框識別執行進入偵錯工具的執行緒。

群組和排序執行緒

當您群組執行緒時,標題會出現在每個群組的表格中。標題包含群組描述 (例如 [背景工作執行緒] 或 [未標幟的執行緒]) 和樹狀目錄控制項。每個群組的成員執行緒會出現在群組標題下方。如果您想要隱藏群組的成員執行緒,則可以使用樹狀目錄控制項來摺疊該群組。

因為群組的優先順序高於排序,所以您可以依據分類這類項目來群組執行緒,然後依據每個分類內的 ID 來進行排序。

若要排序執行緒

  1. 在 [執行緒] 視窗頂端的工具列中,按一下任意資料行頂端的按鈕。

    執行緒現在是依據該資料行中的值進行排序。

  2. 如果想要反轉排序次序,請再按一下相同按鈕。

    出現在清單頂端的執行緒現在會出現在底端。

若要群組執行緒

  • 在 [執行緒] 視窗工具列中,按一下 [群組依據] 清單,然後按一下想要做為執行緒群組依據的準則。

若要排序群組內的執行緒

  1. 在 [執行緒] 視窗頂端的工具列中,按一下 [群組依據] 清單,然後按一下想要做為執行緒群組依據的準則。

  2. 在 [執行緒] 視窗中,按一下任意欄頂端的按鈕。

    執行緒現在是依據該資料行中的值進行排序。

若要展開或摺疊所有群組

  • 在 [執行緒] 視窗頂端的工具列中,按一下 [展開群組] 或 [摺疊群組]。

搜尋特定執行緒

在 Visual Studio 2012 中,您可以搜尋符合所指定字串的執行緒。當您在 [執行緒] 視窗中搜尋執行緒時,這個視窗會顯示所有符合任意資料行中之搜尋字串的執行緒。該資訊包括 [位置] 資料行中出現在呼叫堆疊頂端的執行緒位置。不過,預設不會搜尋整個呼叫堆疊。

若要搜尋特定執行緒

  • 在 [執行緒] 視窗頂端的工具列中,移至 [搜尋] 方塊,並:

    • 輸入搜尋字串,然後按 ENTER 鍵。

      -或-

    • 按一下 [搜尋] 方塊旁邊的下拉式清單,並從先前的搜尋中選取搜尋字串。

  • (選擇性) 若要將整個呼叫堆疊併入搜尋中,請選取 [搜尋呼叫堆疊]。

凍結和解除凍結執行緒

當您凍結執行緒時,即使有可用的資源,系統還是不會開始執行執行緒。

在機器碼中,您可以暫停或繼續執行緒,方法是呼叫 Windows 函式 SuspendThread 和 ResumeThread 或 MFC 函式 CWinThread::SuspendThreadCWinThread::ResumeThread。如果您呼叫 SuspendThread 或 ResumeThread,則會變更 [執行緒] 視窗中顯示的「暫停計數」(Suspended Count)。不過,如果您凍結或解除凍結原生執行緒,則不會變更暫停計數。在機器碼中,除非將執行緒解除凍結,而且其暫停計數為零,否則無法執行執行緒。

在 Managed 程式碼中,凍結或解除凍結執行緒並不會變更暫停計數。在 Managed 程式碼中,已凍結執行緒的暫停計數為 1。在機器碼中,除非透過 SuspendThread 呼叫暫停執行緒,否則已凍結執行緒的暫停計數為 0。

注意事項注意事項

當您偵錯機器碼對 Managed 程式碼的呼叫時,Managed 程式碼與呼叫它的機器碼會在相同的實體執行緒中執行。暫止或凍結原生執行緒,也會凍結 Managed 程式碼。

若要凍結或解除凍結執行緒的執行

  • 在 [執行緒] 視窗頂端的工具列中,按一下 [凍結執行緒] 或 [解除凍結執行緒]。

    這個動作只會影響 [執行緒] 視窗中所選取的執行緒。

顯示加上旗標的執行緒

您可以在 [執行緒] 視窗中以圖示來標記您想要特別注意的執行緒。如需詳細資訊,請參閱 HOW TO:將執行緒加上旗標和取消旗標。在 [執行緒] 視窗中,您可以選擇顯示所有的執行緒或加上旗標的執行緒。

若要顯示加上旗標的執行緒

  • 請選擇旗標按鈕左上角的執行緒視窗。

顯示執行緒呼叫堆疊以及切換框架

在多執行緒程式中,每個執行緒都會有它自己的呼叫堆疊。[執行緒] 視窗則提供便利的方式來檢視這些堆疊。

若要檢視執行緒的呼叫堆疊

  • 在 [位置] 資料行中,按一下執行緒位置旁邊的反轉三角形。

    會展開這個位置,以顯示執行緒的呼叫堆疊。

若要檢視或摺疊所有執行緒的呼叫堆疊

  • 在 [執行緒] 視窗頂端的工具列中,按一下 [展開呼叫堆疊] 或 [摺疊呼叫堆疊]。

請參閱

工作

逐步解說:偵錯多執行緒應用程式

其他資源

偵錯多執行緒應用程式