大多數的應用程序都使用多線程技術。對應Windows應用程序,為了能夠使用戶界面保持快速響應,經常需要把費時的任務放在與主應用程序獨立的線程上運行。此時,多個線程的並發執行調試變得很困難,特別是在多個線程訪問同一個類和方法時。Threads能夠幫助我們減輕復雜度。
打開窗口
一般來說當程序遇到斷點進入調試模式,會自動打開Threads窗口,如果沒有,我們可以通過下面的方式打開:
- 通過菜單欄打開

- 通過快捷鍵
Ctrl+Alt+H
窗口的使用

線程窗口包含其中每行描述一個單獨的線程在應用程序中的表。 默認情況下,該表列出應用程序中的所有線程,但可以篩選列表以僅顯示感興趣的線程。 每個列說明了不同類型的信息。 您還可以隱藏某些列。 如果顯示所有列,顯示以下各列,從左到右:
-
標志:在此未標記的專欄中,可以標記要特別注意的線程。 有關如何標記一個線程的信息,請參閱如何:標記線程和取消標記線程。
-
當前線程:在此未標記的列,黃色箭頭指示當前線程。 概述箭頭指示非當前線程的當前調試器上下文。
-
ID:顯示每個線程的標識號。
-
托管 ID:顯示托管線程的托管的標識號。
-
類別:顯示為用戶界面線程、 遠程過程調用處理程序或工作線程的線程的類別。 一個特殊類別標識應用程序的主線程。
-
名稱:如果有的話,或按名稱標識每個線程<無名稱 >。
-
位置:顯示線程正在其中運行。 可以展開此位置以顯示線程的完整調用堆棧。
-
優先級:(默認情況下隱藏) 的高級的列,顯示系統已分配給每個線程的優先級。
-
關聯掩碼:高級的列 (默認情況下隱藏),顯示了每個線程的處理器關聯掩碼。 在多處理器系統中,關聯掩碼確定線程可以在哪些處理器上運行。
-
掛起項計數:高級的列 (默認情況下隱藏),顯示掛起項計數。 此計數確定線程是否可以運行。
-
進程名稱:(默認情況下隱藏) 的高級的列,顯示每個線程所屬的進程。 在調試多個進程時,此列中的數據很有用。
-
進程 ID:(默認情況下隱藏) 的高級的列,顯示每個線程所屬的進程 ID。
-
傳輸限定符:高級的列 (默認情況下隱藏) 唯一標識調試器連接到的計算機。
在頂部的工具欄線程窗口中,選擇列。 然后,選中或清除要顯示或隱藏的列的名稱。

在“線程”窗口中,可以用圖標標記來標記要格外關注的線程 。 在“線程”窗口中,可以選擇顯示所有線程或僅顯示標記的線程 。

當凍結線程時,系統不會啟動線程的執行,即使提供了資源。在本機代碼中,您可以掛起或繼續線程通過調用 Windows 函數SuspendThread和ResumeThread。 或者,致電 MFC 函數CWinThread::SuspendThread並cwinthread:: Resumethread。 如果您調用SuspendThread或ResumeThread,則掛起項計數中所示線程窗口將會更改。 如果凍結或解凍本機線程不會更改掛起項計數。 線程不能在本機代碼中執行,除非它線程解凍並且其掛起項計數為零。在托管代碼中,當凍結或解凍線程時,將更改掛起項計數。 如果在托管代碼中凍結線程,其掛起項計數為 1。 當本機代碼中凍結線程時,其掛起項計數為 0,除非使用SuspendThread調用。
在頂部的工具欄線程窗口中,選擇凍結線程或解凍線程。此操作僅影響在“線程”窗口中選中的線程 。
黃色箭頭指示當前線程 (和執行指針的位置)。 帶有卷尾的綠色箭頭指示非當前線程具有當前的調試器上下文。

若要切換到另一個線程,請按照以下步驟之一操作:
-
雙擊任一線程。
-
右擊一個線程,然后選擇切換到線程。
分組線程時,表中將顯示每組的標題。 標題包含組說明(如“輔助線程”或“未標記的線程”)和樹控件 。 每組的成員線程顯示在組標題下。 如果你想要隱藏組的成員線程,使用樹控件折疊組。
因為分組優先於排序,所以您可以先按類別(以此為例)分組線程,再按每個類別中的 ID 對其進行排序。
排序線程
-
在頂部的工具欄線程窗口中,選擇任意列頂部的按鈕。
線程現在按該列中的值進行排序。
-
如果你想要反轉排序順序,請再次選擇相同的按鈕。
在列表頂部顯示的線程現在顯示在底部。
分組線程

- 在中線程窗口工具欄中,選擇分組依據列表,然后選擇要分組線程所依據的條件。
對組內線程排序
-
在頂部的工具欄線程窗口中,選擇分組依據列表,然后選擇要分組線程所依據的條件。
-
在中線程窗口中,選擇任意列頂部的按鈕。
線程現在按該列中的值進行排序。
展開或折疊所有組
在頂部的工具欄線程窗口中,選擇展開組或折疊組。

您可以搜索匹配的指定的字符串中的線程線程窗口。 在搜索線程時,窗口將顯示匹配的任何列中的搜索字符串的所有線程。 信息包括在“位置”列中調用堆棧頂部顯示的線程位置 。 默認情況下,不搜索整個調用堆棧。
搜索特定線程
-
在“線程”窗口頂部的工具欄中,轉到“搜索”框,執行下列操作之一 :
- 輸入搜索字符串,然后按Enter。

- 或 -
- 選擇下拉列表旁邊搜索框並選擇上一次搜索的搜索字符串。
- 輸入搜索字符串,然后按Enter。
-
(可選)若要在搜索中包括整個調用堆棧,請選擇“搜索調用堆棧” 。

