分享方式:


在 [平行堆疊] 視窗中檢視執行緒和工作 (C#、Visual Basic、C++)

[平行堆疊] 視窗對於偵錯多執行緒應用程式很有用。 其有數個檢視:

使用平行堆疊視窗

若要開啟 [平行堆疊] 視窗,您必須在偵錯工作階段中。 選取 [偵錯]>[視窗]>[平行堆疊]

工具列控制項

[平行堆疊] 視窗具有下列工具列控制項:

Screenshot of Toolbar in Parallel Stacks window.

圖示 控制 描述
Threads/Tasks combo box 執行緒/工作下拉式方塊 切換執行緒呼叫堆疊檢閱和工作呼叫堆疊檢閱。 如需詳細資訊,請參閱工作檢視執行緒檢視
Show Only Flagged icon 僅顯示有旗標的項目 只針對其他偵錯工具視窗 (例如 [GPU 執行緒] 視窗和 [平行監看式] 視窗) 中加上旗標的執行緒顯示呼叫堆疊。
Toggle Method View icon 切換方法檢視 在呼叫堆疊檢視和方法檢視之間切換。 如需詳細資訊,請參閱方法檢視
Auto Scroll to Current icon 自動捲動到目前堆疊框架 自動捲動圖表,讓目前堆疊框架位於檢視中。 當您從其他視窗變更目前的堆疊框架時,或當您在大型圖表中叫用新的中斷點時,這項功能很有用。
Toggle Zoom icon 切換縮放控制 顯示或隱藏視窗左邊的縮放控制項。

不論縮放控制項的可見性為何,您也可以進行縮放,方法是按 Ctrl 並轉動滑鼠滾輪,或按 Ctrl+Shift++ 來放大和按 Ctrl+Shift+- 來縮小。

Screenshot of Toolbar in Parallel Stacks window 2022.

圖示 控制 描述
Threads/Tasks combo box 執行緒/工作下拉式方塊 切換執行緒呼叫堆疊檢閱和工作呼叫堆疊檢閱。 如需詳細資訊,請參閱工作檢視執行緒檢視
Filter icon 篩選控制項 僅顯示您感興趣的特定執行緒集的呼叫堆疊。
Show Only Flagged icon 僅顯示有旗標的項目 只針對其他偵錯工具視窗 (例如 [GPU 執行緒] 視窗和 [平行監看式] 視窗) 中加上旗標的執行緒顯示呼叫堆疊。
Toggle Method View icon 切換方法檢視 在呼叫堆疊檢視和方法檢視之間切換。 如需詳細資訊,請參閱方法檢視
Auto Scroll to Current icon 自動捲動到目前堆疊框架 自動捲動圖表,讓目前堆疊框架位於檢視中。 當您從其他視窗變更目前的堆疊框架時,或當您在大型圖表中叫用新的中斷點時,這項功能很有用。
Toggle Zoom icon 切換縮放控制 顯示或隱藏視窗左邊的縮放控制項。

不論縮放控制項的可見性為何,您也可以進行縮放,方法是按 Ctrl 並轉動滑鼠滾輪,或按 Ctrl+Shift++ 來放大和按 Ctrl+Shift+- 來縮小。
Search icon 搜尋控制項 透過這項功能,您可以輕鬆地搜尋整個堆疊框架,然後使用箭號在這些結果之間瀏覽。
Save icon 儲存控制項 可讓您將平行堆疊視窗中的內容儲存/匯出為影像。
External Code icon 顯示外部程式碼控制項 使用這項功能,您可以顯示/隱藏來自外部程式碼/程式庫的堆疊。

堆疊框架圖示

下列圖示提供所有檢視中使用中和目前堆疊框架的相關資訊:

Icon 描述
Yellow arrow 指出目前執行緒的目前位置 (使用中堆疊框架)。
Threads icon 指出非目前執行緒的目前位置 (使用中堆疊框架)。
Green arrow 指出目前的堆疊框架 (目前的偵錯工具內容)。 無論其出現位置,方法名稱都是粗體。
Icon 描述
Yellow arrow 指出目前執行緒的目前位置 (使用中堆疊框架)。
Threads icon 指出非目前執行緒的目前位置 (使用中堆疊框架)。
Green arrow 指出目前的堆疊框架 (目前的偵錯工具內容)。 方法名稱無論出現在哪裡都是粗體的。
Status Error 指出目前的堆疊框架具有嚴重狀態警告,例如死結。
Status Excluded 指出死結節點。
Status Information 指出目前的堆疊框架具有其他資訊,例如正在等候、正在等候鎖定、擁有者等。
Status Blocked 指出目前工作處於已封鎖/正在等候狀態等。
Status Running 指出目前正在執行的工作。

操作功能表項目

以滑鼠右鍵按一下 [執行緒] 檢視或 [工作 ] 檢視中的方法時,可以使用下列捷徑功能表項目。 最後六個項目與 [呼叫堆疊] 視窗中的項目相同。

Screenshot of Shortcut menu in Parallel Stacks window.

功能表項目 描述
旗標 將選取的項目加上旗標。
取消旗標 取消所選取項目的旗標。
凍結 將選取的項目凍結。
解除凍結 將選取的項目解除凍結。
切換至框架 與 [呼叫堆疊] 視窗中對應的功能表命令相同。 不過,在 [平行堆疊] 視窗中,一種方法可能位於數個框架中。 您可以在此項目的子功能表中選取您所需的框架。 如果其中一個堆疊框架位於目前的執行緒上,預設會在子功能表中選取該框架。
移至工作移至執行緒 切換至 [工作] 或 [執行緒] 檢視,並將相同的堆疊框架保持醒目提示狀態。
移至原始程式碼 移至原始程式碼視窗中的對應位置。
前往反組譯碼 移至 [反組譯碼] 視窗中的對應位置。
顯示外部程式碼 顯示或隱藏外部程式碼。
十六進位顯示 切換十進位和十六進位顯示。
在原始程式檔中顯示執行緒 將原始程式碼視窗中執行緒的位置加上旗標。
符號載入資訊 開啟 [符號載入資訊] 對話方塊。
符號設定 開啟 [符號設定] 對話方塊。

Screenshot of Shortcut menu in Parallel Stacks window 2022.

功能表項目 描述
複製 複製選取的項目。
選取下方的所有框架 選取所選堆疊下的所有框架。
旗標 將選取的項目加上旗標。
取消旗標 取消所選取項目的旗標。
凍結 將選取的項目凍結。
解除凍結 將選取的項目解除凍結。
切換至框架 與 [呼叫堆疊] 視窗中對應的功能表命令相同。 不過,在 [平行堆疊] 視窗中,一種方法可能位於數個框架中。 您可以在此項目的子功能表中選取您所需的框架。 如果其中一個堆疊框架位於目前的執行緒上,預設會在子功能表中選取該框架。
移至工作移至執行緒 切換至 [工作] 或 [執行緒] 檢視,並將相同的堆疊框架保持醒目提示狀態。
移至原始程式碼 移至原始程式碼視窗中的對應位置。
前往反組譯碼 移至 [反組譯碼] 視窗中的對應位置。
顯示外部程式碼 顯示或隱藏外部程式碼。
十六進位顯示 切換十進位和十六進位顯示。
在原始程式檔中顯示執行緒 將原始程式碼視窗中執行緒的位置加上旗標。
符號載入資訊 開啟 [符號載入資訊] 對話方塊。
符號設定 開啟 [符號設定] 對話方塊。

執行緒檢視

在 [執行緒] 檢視中,目前執行緒的堆疊框架和呼叫路徑會以藍色醒目提示。 執行緒的目前位置是由黃色箭號顯示。

若要變更目前的堆疊框架,請按兩下不同的方法。 這也可能會切換目前的執行緒,取決於您選取的方法是目前執行緒還是其他執行緒的一部分。

當 [執行緒] 檢視圖表太大而無法放入視窗時,[鳥瞰檢視] 控制項會出現在視窗中。 您可以移動控制項中的框架,以瀏覽至圖表的不同部分。

下圖顯示從主要到受控再到機器碼轉換的執行緒。 有六個執行緒在目前方法中。 一個會繼續至 Thread.Sleep、另一個會繼續至 Console.WriteLine,然後再至 SyncTextWriter.WriteLine。

Screenshot of Threads view in Parallel Stacks window.

下表描述 [執行緒] 檢視的主要功能:

圖說文字 元素名稱 描述
1 呼叫堆疊區段或節點 包含一個或多個執行緒的一系列方法內容。 如果框架沒有與其連線的箭號線,框架會顯示執行緒的整個呼叫路徑。
2 藍色醒目提示 表示目前執行緒的呼叫路徑。
3 帶箭號的線條 連接節點,以構成執行緒的整個呼叫路徑。
4 節點標頭 顯示節點的流程和執行緒數目。
5 方法 表示相同方法中的一個或多個堆疊框架。
6 方法上的工具提示 將滑鼠停留在方法上時,即會出現。 在 [執行緒] 檢視中,工具提示會在類似 [執行緒] 視窗的表格中顯示所有執行緒。

下圖顯示從主要到受控再到機器碼轉換的執行緒。 有五個執行緒在目前方法中。 一個會繼續至 ServerClass.InstanceMethod、另一個會繼續至 Worker.Thread.Start,然後再至 StartupHook.Initialize.AnonymousMethod。

Screenshot of Threads view in Parallel Stacks window 2022.

下表描述 [執行緒] 檢視的主要功能:

圖說文字 元素名稱 描述
1 呼叫堆疊區段或節點 包含一個或多個執行緒的一系列方法內容。 如果框架沒有與其連線的箭號線,框架會顯示執行緒的整個呼叫路徑。
2 藍色醒目提示 表示目前執行緒的呼叫路徑。
3 帶箭號的線條 連接節點,以構成執行緒的整個呼叫路徑。
4 節點標頭 顯示節點的流程/執行緒數目、執行緒名稱和執行緒識別碼。
5 方法 表示相同方法中的一個或多個堆疊框架。
6 方法上的工具提示 將滑鼠停留在方法上時,即會出現。 在 [執行緒] 檢視中,工具提示會在類似 [執行緒] 視窗的表格中顯示所有執行緒。

工作檢視

如果您的應用程式使用 System.Threading.Tasks.Task 物件 (受控程式碼) 或 task_handle 物件 (機器碼) 來表示平行處理原則,您可以使用 [工作] 檢視。 [工作] 檢視會顯示工作 (而非執行緒) 的呼叫堆疊。

在 [工作] 檢視中:

  • 執行緒若未執行工作,則不會顯示其呼叫堆疊。
  • 執行緒若正在執行工作,則會在頂端和底部以視覺方式修剪其呼叫堆疊,以顯示工作的最相關框架。
  • 當數個工作在一個執行緒上時,這些工作的呼叫堆疊會顯示在個別的節點中。

若要查看整個呼叫堆疊,請以滑鼠右鍵按一下堆疊框架,然後選取 [移至執行緒],切換回 [執行緒] 檢視。

下圖顯示頂端的 [執行緒] 檢視,以及底部的對應 [工作] 檢視。

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

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

下圖顯示頂端 [執行緒] 檢視中方法的工具提示,以及底部對應 [工作] 檢視的工具提示。

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

方法檢視

從 [執行緒] 檢視或 [工作] 檢視中,您可以轉向目前方法的圖表,方法是選取工具列上的 [切換方法檢視] 圖示。 [方法檢視] 會顯示所有執行緒上所有呼叫目前方法,或由目前方法呼叫的方法。 下圖顯示相同資訊在左側 [執行緒] 檢視和右側 [方法] 檢視中的外觀。

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

如果切換到新的堆疊框架,您會使該方法成為目前的方法,而 [方法檢視] 會顯示新方法的所有呼叫者和被呼叫者。 有些執行緒可能會因此顯示或不見,視該方法是否出現在這些執行緒的呼叫堆疊中。 若要返回呼叫堆疊檢視,請重新選取 [方法檢視] 工具列圖示。

使用平行堆疊影片教學課程來偵錯執行緒和工作

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