共用方式為


在 [平行堆棧] 視窗中檢視線程和工作(C#、Visual Basic、C++)

平行堆疊 視窗對於偵錯多線程應用程式很有用。 它有數個觀點:

  • 線程檢視 顯示應用程式中所有線程的呼叫堆棧資訊。 您可以在這些線程和它們的堆疊框架之間巡覽。
  • 任務檢視 顯示以任務為中心的呼叫堆疊資訊。
    • 對於使用 async/await 模式的 .NET 應用程式,[工作] 檢視最有助於偵錯。 如需逐步教學課程,請參閱 偵錯非同步應用程式
    • 對於使用工作平行程式庫 (TPL) 但未使用非同步/等待模式的應用程式,或使用並行執行階段的 C++ 應用程式,[平行堆疊] 視窗中的 [執行緒] 檢視是最有用的偵錯工具。
  • 任務檢視 顯示以任務為中心的呼叫堆疊資訊。
    • 對於使用 async/await 模式的 .NET 應用程式,[工作] 檢視最有助於偵錯。
    • 對於使用工作平行程式庫 (TPL) 但未使用非同步/等待模式的應用程式,或使用並行執行階段的 C++ 應用程式,[平行堆疊] 視窗中的 [執行緒] 檢視是最有用的偵錯工具。
  • 方法檢視 將呼叫堆疊以所選方法為中心進行顯示。

使用 [平行堆疊] 視窗

若要開啟 平行堆疊 視窗,您必須在偵錯會話中。 選取 偵錯>視窗>平行堆疊

工具列控件

平行堆疊 視窗具有下列工具列控制器:

[平行堆疊] 視窗中工具列的螢幕快照。

圖示 控制 描述
執行緒/任務下拉式方塊 執行緒/任務 組合框 切換線程呼叫堆疊與呼叫工作堆疊之間的檢視。 如需詳細資訊,請參閱 工作檢視線程檢視
僅顯示標幟圖示 僅顯示已標記 僅針對其他調試程式中標幟的線程顯示呼叫堆棧,例如 GPU 線程 視窗和 平行監看 視窗。
切換方法檢視示, 切換 方法檢視 在呼叫堆棧檢視和 方法檢視之間切換。 如需詳細資訊,請參閱 方法檢視
自動捲動至目前圖示; 自動捲動至目前的堆疊框架 自動捲動畫面,以便目前的堆疊幀在視圖中顯示。 當您從其他視窗變更目前的堆疊框架,或當您在大型圖形中觸發新的斷點時,這項功能很有用。
切換縮放圖示 切換縮放控件 顯示或隱藏視窗左邊的縮放控件。

不論縮放控件的可見度為何,您也可以按 Ctrl 並翻轉滑鼠滾輪,或按 Ctrl+Shift++ 來放大,按 Ctrl+Shift+- 來縮小。

[平行堆疊] 窗口中工具列的螢幕快照 2022。

圖示 控制 描述
執行緒/任務下拉式方塊 執行緒/任務 組合框 切換線程呼叫堆疊與呼叫工作堆疊之間的檢視。 如需詳細資訊,請參閱 工作檢視線程檢視
篩選圖示 篩選 控制 僅針對您感興趣的特定線程集顯示呼叫堆疊。
僅顯示標幟圖示 僅顯示已標記 僅針對其他調試程式中標幟的線程顯示呼叫堆棧,例如 GPU 線程 視窗和 平行監看 視窗。
切換方法檢視示, 切換 方法檢視 在呼叫堆棧檢視和 方法檢視之間切換。 如需詳細資訊,請參閱 方法檢視
自動捲動至目前圖示; 自動捲動至目前的堆疊框架 自動捲動畫面,以便目前的堆疊幀在視圖中顯示。 當您從其他視窗變更目前的堆疊框架,或當您在大型圖形中觸發新的斷點時,這項功能很有用。
切換縮放圖示 切換縮放控件 顯示或隱藏視窗左邊的縮放控件。

不論縮放控件的可見度為何,您也可以按 Ctrl 並翻轉滑鼠滾輪,或按 Ctrl+Shift++ 來放大,按 Ctrl+Shift+- 來縮小。
搜尋圖示 搜尋控件 透過這項功能,您可以輕鬆地搜尋堆疊框架,然後使用箭號在這些結果之間巡覽。
儲存圖示 儲存控制件 可讓您將平行堆疊視窗中的內容儲存/匯出為影像。
外部程式代碼圖示 顯示外部程式碼控件 使用這項功能,您可以從外部程式代碼/連結庫顯示/隱藏堆棧。
Copilot 摘要圖示 彙整呼叫堆疊資訊 從 Visual Studio 2022 版本 17.13 Preview 4 開始,一旦安裝並啟用了 Copilot,您可以選擇 摘要。 此按鈕會開啟 [Copilot Chat] 視窗,預先載入相關的線程內容,讓您探索詳細數據,包括線程狀態、函數調用和建議的修正程式。

堆疊框架圖示

下列圖示提供有關各檢視中作用中及目前堆疊框架的資訊:

圖示 描述
黃色箭號 指出當前線程的目前位置(活動堆疊框架)。
線程圖示 指出非目前執行緒的目前位置 (作用中堆疊框架) 。
綠色箭號 表示目前的堆疊框架(目前的調試程序內容)。 無論其出現位置,方法名稱都是粗體。
圖示 描述
黃色箭號 指出當前線程的目前位置(活動堆疊框架)。
線程圖示 指出非當前執行緒的當前位置(活動堆疊框架)。
綠色箭號 表示目前的堆疊框架(目前的調試程序內容)。 無論其出現位置,方法名稱都是粗體。
狀態錯誤 (.NET)表示目前堆疊框架具有嚴重狀態警告,例如死鎖。
狀態已排除 (.NET)指出死鎖節點。
狀態資訊 (.NET)表示目前的堆疊框架具有其他資訊,例如等待鎖定、等待鎖定、擁有者等。
狀態封鎖 (.NET)表示目前任務處於封鎖/等待狀態等。
執行中狀態 指出目前正在執行的工作。

內容選單項目

[線程] 檢視或 [工作] 檢視中,當您以滑鼠右鍵單擊某個方法時,可以使用下列捷徑選單項目。 最後六個項目與 呼叫堆疊視窗中的相同。

[平行堆棧] 視窗中快捷方式功能表的螢幕快照。

選單項目 描述
旗標 標記選取的項目。
取消標記 取消選取的項目旗標。
凍結 凍結選取的項目。
解凍 解凍選取的項目。
切換至框架 呼叫堆疊 視窗中的對應功能表命令相同。 不過,在 [平行堆疊] 視窗中,一個方法可能位於數個畫面中。 您可以在此項目的子選單中選取您想要的框架。 如果其中一個堆疊框架位於目前的線程上,該框架預設會在子功能表中選取。
移至工作移至線程 切換至 任務線程 檢視,並保持相同的堆疊框架突出。
前往原始程式碼 移至原始碼視窗中的對應位置。
移至反組譯碼 移至 反組譯碼 視窗中的對應位置。
顯示外部程式碼 顯示或隱藏外部程序代碼。
十六進位顯示 在十進位和十六進位顯示之間切換。
在來源 中顯示線程 將線程的位置標幟在原始程式碼視窗中。
符號載入資訊 開啟 [符號載入資訊] 對話框。
符號設定 開啟 [符號設定] 對話框

[平行堆棧] 視窗中快捷方式功能表的螢幕快照 2022。

選單項目 描述
複製 複製選取的項目。
選取下方的所有框架 選取所選取堆疊下的所有框架。
旗標 標記選取的項目。
取消標記 取消選取的項目旗標。
凍結 凍結選取的項目。
解凍 解凍選取的項目。
切換至框架 呼叫堆疊 視窗中的對應功能表命令相同。 不過,在 [平行堆疊] 視窗中,一個方法可能位於數個畫面中。 您可以在此項目的子選單中選取您想要的框架。 如果其中一個堆疊框架位於目前的線程上,該框架預設會在子功能表中選取。
移至工作移至線程 切換至 任務線程 檢視,並保持相同的堆疊框架突出。
前往原始程式碼 移至原始碼視窗中的對應位置。
移至反組譯碼 移至 反組譯碼 視窗中的對應位置。
顯示外部程式碼 顯示或隱藏外部程序代碼。
十六進位顯示 在十進位和十六進位顯示之間切換。
在來源 中顯示線程 將線程的位置標幟在原始程式碼視窗中。
符號載入資訊 開啟 [符號載入資訊] 對話框。
符號設定 開啟 [符號設定] 對話框

線程檢視

執行緒 檢視中,目前執行緒的堆疊框架和呼叫路徑會以藍色突出顯示。 線程的目前位置是由黃色箭號顯示。

若要變更目前的堆疊框架,請雙擊不同的函式。 這也可能會切換目前的線程,視您選取的方法是否為目前線程或其他線程的一部分而定。

線程 檢視圖形太大而無法放入視窗時,視窗會出現 鳥眼檢視 控件。 您可以移動控件中的框架,以巡覽至圖形的不同部分。

下圖顯示在託管到原生代碼轉換中的主線程。 目前方法中有五個線程。 在 S.C 方法內容中,四個線程繼續執行;而一個工作線程則持續於 Managed 到 Native 程式碼轉換過程中執行,並在該工作線程上設定名稱。

[平行堆棧] 視窗中 [線程] 檢視的螢幕快照。

下表描述 線程 檢視的主要功能:

標註 元素名稱 描述
1 呼叫堆疊 (Call Stack) 區段或節點 包含一或多個線程的一系列方法。 如果框架沒有與其連接的箭號線,框架會顯示線程的整個呼叫路徑。
2 藍色醒目提示 指出目前線程的呼叫路徑。
3 箭頭線 連接節點以構成線程的整個呼叫路徑。
4 節點標題 顯示節點的進程/線程、線程名稱和線程標識碼數目。
5 方法 代表相同方法中的一或多個堆疊框架。
6 方法上的工具提示 當您將滑鼠停留在方法上時,會出現。 在 [線程] 檢視中,工具提示會顯示數據表中的所有線程,類似於 [線程] 視窗。
7 線程描述 AI 產生的線程描述。 從 Visual Studio 2022 17.13 版 Preview 1 開始,安裝並啟動 Copilot 時,會出現此描述。

獲得 AI 協助

如果您有 Copilot,您可以在 [線程] 檢視中使用 AI 產生的線程描述,並使用 [ 產生深入解析 ] 按鈕來取得 AI 協助。 使用 Screenshot of Generate Insights button.產生深入解析螢幕擷取畫面。按鈕與 Copilot 互動,瞭解您看到的執行緒資料。 在此案例中,Copilot 已經知道您問題的內容,因此您不需要在聊天中自行提供內容。 如需詳細資訊,請參閱 使用 Copilot 偵錯

若要啟用或停用執行程摘要描述,請開啟 [工具>選項] 窗格,然後展開 [所有設定>]GitHub>Copilot>偵錯工具和診斷區段。 選取或清除 在平行堆疊視窗中啟用 AI 摘要 核取方塊。

若要啟用或停用執行緒摘要描述,請開啟 [工具>選項] 對話方塊,然後展開 [GitHub>Copilot ] 區段。 在 偵錯工具和診斷 類別中,選取或清除在 平行堆疊視窗中啟用 AI 摘要 核取方塊。

下圖顯示一個線程,從 Main 到 Managed 到 Native 程式代碼轉換。 目前方法中有六個線程。 兩個線程會繼續執行 Thread.Sleep,兩個線程會繼續至 Console.WriteLine,而目前的線程會繼續同步處理TextWriter.WriteLine。

[平行堆棧] 視窗中 [線程] 檢視的螢幕快照。

下表描述 線程 檢視的主要功能:

標註 元素名稱 描述
1 呼叫堆疊 (Call Stack) 區段或節點 包含一或多個線程的一系列方法。 如果框架沒有與其連接的箭號線,框架會顯示線程的整個呼叫路徑。
2 藍色醒目提示 指出目前線程的呼叫路徑。
3 箭頭線 連接節點以構成線程的整個呼叫路徑。
4 節點標題 顯示節點的進程和線程數目。
5 方法 代表相同方法中的一或多個堆疊框架。
6 方法上的工具提示 當您將滑鼠停留在方法上時,會出現。 在 [線程] 檢視中,工具提示會顯示數據表中的所有線程,類似於 [線程] 視窗。

任務視圖

對於使用 async/await 模式的 .NET 應用程式,[工作] 檢視最有助於偵錯。 如需逐步教學課程,請參閱 偵錯非同步應用程式

「任務」 檢視中,您可以:

  • 檢視使用非同步/等待模式之應用程式的呼叫堆疊視覺效果。
  • 識別已排程執行但尚未執行的非同步程式碼。

下圖顯示頂端 線程 檢視,以及底部對應的 工作 檢視。

線程和工作檢視的螢幕快照。

平行堆棧視窗中工作檢視的螢幕快照。

將滑鼠停留在方法上,以顯示具有其他資訊的工具提示。 在 [工作] 檢視中,工具提示會顯示數據表中的所有工作,類似於 [工作] 視窗。

下圖顯示了在上方 線程 檢視中方法的工具提示,以及在下方對應的 工作 檢視中的工具提示。

線程和工作工具提示的螢幕快照。

線程和工作工具提示的螢幕快照。

方法視圖

從 [線程] 檢視或 [工作] 檢視中,您可以在工具列上選取 [切換方法檢視] 圖示,以變更目前方法的圖表視角。 方法檢視 可一目了然地顯示所有在所有線程中呼叫目前方法或被目前方法呼叫的方法。 下圖顯示相同信息在左側的 線程檢視 和右側的 方法檢視 中的外觀。

平行堆棧視窗中方法檢視的螢幕快照。

[Parallel Stacks] 視窗 2022 中 [Methods] 檢視的螢幕快照。

如果您切換到新的堆疊框架,您會將該方法設為目前的 方法,方法檢視 會顯示新方法的所有呼叫端和呼叫者。 此案例可能會導致某些執行程從檢視中出現或消失,視該方法是否出現在其呼叫堆疊上而定。 若要返回呼叫堆棧檢視,請再次選取 方法檢視 工具列圖示。

使用平行堆疊進行線程和任務偵錯的教學影片

這些影片教學課程示範如何使用 Visual Studio 2022 中平行堆疊視窗的 [線程和工作] 檢視來偵錯多線程應用程式。