閱讀英文

共用方式為


在 Visual Studio 調試程序中檢視線程(C#、Visual Basic、C++)

Visual Studio 調試程式中的 [線程] 視窗可讓您檢查及處理您要偵錯的應用程式中的線程。 視窗提供功能來分組、排序、旗標、凍結、解除凍結,以及搜尋程式代碼中的線程,以及顯示呼叫堆疊。

線程 視窗只能在 Visual Studio 調試程式執行時使用。 在偵錯會話期間,您可以選取 [偵錯>Windows>執行緒]開啟視窗。

本文說明如何使用 C#、Visual Basic 或 C++ 程式的 線程 視窗。 如果您要尋找如何使用 [線程] 視窗的逐步指引,請參閱 逐步解說:使用 [線程] 視窗進行偵錯

探索 [線程] 視窗數據表

[線程] 視窗會顯示數據表,其中每個數據列都會對應至應用程式中的個別線程。 在預設檢視中,數據表會顯示應用程式中的所有線程。 您可以設定資料表設定,只顯示您感興趣的線程。 數據表提供多個數據行來詳細描述線程。 您可以調整資料行位置,並隱藏不必要的數據行。

下表描述 線程 視窗數據表的所有可用數據行,並指出數據行在默認檢視中是否可見或隱藏。 數據行會根據其預設數據表位置從左至右列出。

預設 描述
旗標 可見、未標記 此數據行中的紅色旗標表示標示為特別注意的線程。 選取旗標(圖示顏色變為紅色),以標記或取消標記(圖示變為旗標輪廓)討論串。 彩色旗標圖示有助於區分標示的線程與數據表中的其他線程。 如需詳細資訊,請參閱 標記和取消標記討論串
目前線程 可見、未標記 此數據行中的黃色箭號圖示表示在調試程式中執行之應用程式中目前的線程。 此欄中的箭號外框圖示表示非目前執行緒的目前偵錯器上下文。
識別碼 可見 提供每個線程的識別碼。
受控識別碼 可見 顯示受控線程的識別碼。
類別 可見 指示線程的類別為使用者介面線程、遠端程序呼叫處理器或背景工作線程。 特殊類別會識別應用程式的主要線程。
名稱 可見 依其名稱識別每個線程,如果線程沒有指定的名稱,則 <沒有名稱>。 當執行緒不再存在時,該執行緒會顯示標籤 [Thread Destroyed]。
位置 可見 顯示線程在應用程式呼叫堆疊內執行的位置。 選取下拉式箭號以查看線程的完整呼叫堆棧。 當線程已不存在時,位置會標示為 <無法使用>。
優先順序 隱藏 顯示系統指派給每個線程的優先級或等級順序。
資源關聯遮罩 隱藏 顯示每個線程的處理器親和性遮罩。 在多處理器系統中,親和性遮罩會決定線程可執行的處理器。
暫停計數 隱藏 提供暫停的計數。 此計數會決定線程是否可以執行。 如需詳細資訊,請參閱 凍結和解除凍結線程
程序名稱 隱藏 顯示每個線程所屬的進程。 當您偵錯許多進程時,此數據行中的數據可能會很有用。
進程標識碼 隱藏 顯示每個線程所屬的進程標識碼。
傳輸限定符 隱藏 唯一識別調試程式所連接的機器。

顯示和隱藏數據表數據列

在 [線程] 視窗工具列中,[欄位] 下拉式清單會顯示可用的欄位。 展開下拉式清單,然後選取資料行名稱,以在數據表中切換其可見性。 可見欄位會以清單中的勾選標記表示。

特別注意的旗標線程

使用旗標圖示標記討論串以獲得特別注意。 標示的線程會以 線程 視窗數據表中的紅色旗標圖示表示。 如需詳細資訊,請參閱 旗標和取消旗標討論串

只顯示被標記的主題

您可以篩選 [線程] 視窗,只顯示已標記的線程。 在 [線程] 視窗工具列中,選取 [僅顯示已標幟的線程](雙旗標圖示)。 您也可以使用 Ctrl Ctrl + 9 鍵盤快捷方式。 只有在有標幟的線程時,才能使用此動作。

凍結與解凍線程

當您凍結線程時,即使資源可用,系統也不會開始執行線程。

在機器碼中,您可以呼叫 Windows 函式 SuspendThreadResumeThread來暫停或繼續線程。 您可以呼叫 MFC 函式 CWinThread::SuspendThreadCWinThread::ResumeThread。 如果您呼叫 SuspendThreadResumeThread 函式,暫停的計數 顯示在 [線程] 視窗中變更。 如果您凍結或解除凍結原生線程,暫停的計數不會變更。 除非執行緒已解除凍結且暫停計數為零,否則執行緒無法在原生碼中執行。

在 Managed 程式代碼中,當您凍結或解除凍結線程時,暫停的計數會變更。 如果您在受管理的程式碼中凍結線程,其暫停計數為1。 當您在本機程式碼中凍結執行緒時,除非使用 SuspendThread 呼叫,否則其暫停計數為 0。

注意

當您偵錯從原生程式碼到 Managed 程式碼的呼叫時,Managed 程式碼會在與呼叫原生程式碼相同的實體線程中執行。 暫停或凍結原生線程也會凍結 Managed 程式代碼。

變更所選線程的執行

您可以凍結或解凍一或多個線程的執行。 在 [線程] 視窗中,選取您要更新執行狀態的線程。 在 [線程] 視窗工具列中,選取 [凍結線程(暫停播放圖示)或 解除凍結線程(綠色播放圖示)。 動作僅適用於目前選取的線程。 每個線程的滑鼠右鍵操作功能表上也提供凍結和解除凍結動作。

變更目前的線程

線程 視窗數據表中的黃色箭號圖示表示目前線程(以及執行指標的位置)。 原始線程標記仍然存在,顯示為箭頭輪廓圖示。

線程 視窗數據表中的黃色箭號圖示表示目前線程(以及執行指標的位置)。 帶有捲曲尾部的綠色箭頭圖示表示非當前線程具有當前的調試器環境。

切換至另一個線程

有兩種方式可以在調試程式中切換目前的線程。 按兩下 線程 視窗資料表中的任何線程,使其成為目前的線程。 您也可以右鍵點擊線程,然後選取 切換至線程

將群組和排序套用至線程

您可以使用與可用資料行相同的準則,將 [線程] 視窗資料表中的線程分組。 不論對應的數據行是否顯示在目前檢視中,所有準則一律可供分組。 您只能選取資料表的一個群組。

當您將線程分組時,每個群組的數據表中會出現一個標題。 標題包含群組描述,以及群組中的成員數目。 如果您依 名稱分組,您可能會看到 工作線程未標記的線程等標題群組。 展開/折迭箭號圖示會出現在每個群組標題旁邊。

套用群組準則之後,線程 視窗數據表的檢視會更新,以顯示其標題下每個群組的成員線程。 使用群組的展開/折迭箭號圖示來顯示或隱藏目前檢視中的成員。

您也可以將單一排序準則套用至 線程 視窗數據表中的線程。 群組的優先順序高於排序。 例如,您可以將線程依據 類別 進行分組,然後在每個 類別內依照 標識子 進行排序。

群組數據表中的線程

在 [線程] 視窗工具列中,展開 [依群組] 下拉式清單,然後選擇用於群組線程的準則。 您也可以在 [依 ] 下拉式清單中選取 [None] 來移除套用的群組。

排序表中的線程

您可以選取數據表頂端的欄位標頭,例如 名稱標識,將排序套用到 線程 視窗表中的線程。

當您選取欄位標頭時,緒程 視窗表格的視圖會更新,以顯示根據所選欄位中值排序的緒程。 選取的欄位也會顯示向上/向下箭頭圖示。 向上箭號圖示表示以遞增順序依選取的欄排序。 向下箭號圖示會以遞減順序表示依選取的數據行排序。 點擊欄位標頭以更改排序方式。

排序群組中的線程

若要在 [線程] 視窗中對群組內的線程進行排序,請先使用 [依群組] 下拉式清單來套用群組準則。 然後,選取數據行標頭,依所選數據行中的值排序群組線程。

展開或折疊所有群組

快速顯示或隱藏目前檢視中的所有群組。 在 [線程] 視窗工具列中,選取 [展開群組] (具有加號的雙框圖示)或 [折迭群組] (具有減號的雙框圖示)。

搜尋討論串

您可以在 [線程] 視窗數據表中搜尋線程,並在任何可見的數據表數據行中尋找特定內容。 當您進行搜尋時,Visual Studio 會顯示具有符合搜尋字串之數據行數據的線程數據列。 搜尋還會掃描出現在 [位置] 資料行中呼叫堆疊頂端的 線程位置。

搜尋線程中的特定內容

有數種方式可以搜尋特定內容的線程。 在 [線程] 視窗工具列中,輸入字元串以在 [搜尋] 方塊中尋找,然後選取 [Enter]。 您可以在搜尋字串中指定字母、數位和特殊字元,例如 <。 搜尋完成時,[線程] 視窗會更新數據表,以顯示具有相符結果的線程。 Visual Studio 會醒目提示符合搜尋字串的特定實例。 若要返回一般線程檢視,請選取 [搜尋] 方塊旁的 X 圖示。

您也可以搜尋您先前尋找的字串。 使用 [搜尋] 下拉式方塊,然後選取先前的搜尋字串。

搜尋完整呼叫堆疊

根據預設,不會搜尋完整呼叫堆疊。 Visual Studio 只會在 執行緒 視窗表格中顯示的執行緒中搜尋匹配項目。

您可以在 [線程] 視窗工具列中選取 [在搜尋 中包含呼叫堆棧],以包含完整的呼叫堆棧。 啟用選項時,清單項目圖示具有框線。

顯示呼叫堆疊並在框架之間切換

在多線程程式中,每個線程都有自己的呼叫堆棧。 [執行緒] 視窗提供了一種方便的方式來檢視這些堆疊。

提示

如需每個線程之呼叫堆疊的可視化表示法,請使用 [平行堆棧 ] 視窗。

檢視線程的呼叫堆疊

在 [線程] 視窗數據表中,找出您要檢查完整呼叫堆棧的線程。 在 [位置] 欄中,選取線程位置左側的展開/折迭箭號。 位置會展開以完整顯示執行緒的呼叫堆疊。 再次選取箭號,只顯示位置。

檢視或折疊所有呼叫堆疊

您可以控制 線程 視窗是否一律會顯示資料表中所有線程的完整呼叫堆疊。 在 [線程] 視窗工具列中,選取 展開呼叫堆棧(具有加號的方塊圖示)或 折迭呼叫堆棧(具有減號的方塊圖示)。