共用方式為


使用平行工作視窗

更新:2011 年 3 月

[平行工作] 視窗與 [執行緒] 視窗類似,差別在於顯示的是每個 System.Threading.Tasks.Tasktask_handle 物件的詳細資訊,而非每個執行緒的詳細資訊。 與執行緒一樣,工作代表可以並行執行的非同步作業,但是多項工作可能會在相同執行緒上執行。

在 Managed 程式碼中,您可以在操作 System.Threading.Tasks.Task 物件時使用 [平行工作] 視窗。 如需 Managed 程式碼中之工作的詳細資訊,請參閱 以 .NET Framework 進行平行程式設計

在機器碼中,您可以在操作工作群組平行演算法非同步代理程式輕量型工作時使用 [平行工作] 視窗。 如需機器碼格式之工作的詳細資訊,請參閱並行執行階段

只要您進入偵錯工具,就可以使用 [平行工作] 視窗。 存取方式是按一下 [偵錯] 功能表上的 [視窗],然後按一下 [平行工作]。 下圖顯示處於預設模式的 [平行工作] 視窗。

[平行工作] 視窗

注意事項注意事項

在 Managed 程式碼中,狀態為 CreatedWaitingForActivationWaitingToRunTask 如果當初建立或排程它的執行緒處於睡眠或聯結狀態,就可能不會出現在 [平行工作] 視窗中。

平行工作資料行資訊

[平行工作] 視窗中的資料行顯示下列資訊。

資料行名稱

說明

旗標

顯示已加上旗標的工作,並可讓您為工作加上或取消旗標。

圖示

黃色箭號表示目前工作。 目前工作是目前執行緒上的最上方工作。

白色箭號表示最新的工作,即叫用偵錯工具時的最新工作。

暫停圖示表示已由使用者凍結的工作。 在清單中,於工作上按一下滑鼠右鍵,就可以凍結和解除凍結工作。

ID

由系統提供給工作的號碼。 在機器碼中,這是工作的位址。

狀態

工作的目前狀態 (已排程、執行中、死結或等待中)。 已排程工作是尚未執行的工作,因此,還沒有呼叫堆疊、指派的執行緒或相關資訊。

執行中工作是在進入偵錯工具之前正在執行程式碼的工作。

等待中工作是因等待事件發出信號、釋放鎖定或另一個工作完成而遭封鎖的工作。

死結工作是其執行緒與另一個執行緒產生死結的等待中工作。

將滑鼠游標停留在死結或等待中工作的 [狀態] 儲存格上方,就可以查看封鎖的詳細資訊。

注意事項注意事項
只有在被封鎖的工作是使用等待鏈結周遊 (WCT) 所支援的同步處理原始物件時,[平行工作] 視窗才會報告死結。例如,如果遭死結的 Task 物件使用了 WCT,偵錯工具會報告 [等待中-死結]。如果遭死結的工作是由「並行執行階段」管理 (即不使用 WCT),偵錯工具會報告 [等待中]。如需 WCT 的詳細資訊,請參閱等待鏈結周遊 (英文)。

位置

在工作之呼叫堆疊中的目前位置。 將滑鼠游標停留在這個儲存格上方,就可以查看整個工作的呼叫堆疊。 已排程工作的這個資料行沒有值。

工作

初始方法和任何在建立工作時未傳遞給工作的引數。

父代

建立這個工作之工作的 ID。 如果空白,表示工作沒有父代。 這只適用於 Managed 程式。

執行緒指派

正在執行工作之執行緒的 ID 和名稱。

AppDomain

針對 Managed 程式碼,是正在執行工作的應用程式定義域。

task_group

針對機器碼,是已排程工作之 task_group 物件的位址。 針對非同步代理程式和輕量型工作,此欄會設為 0。

在資料行標題上按一下滑鼠右鍵,然後選取想要的資料行,就可以將資料行加入至檢視 (清除選取範圍,就可以移除資料行)。您也可以將資料行向左或向右拖曳,以重新排列資料行。 下圖顯示資料行捷徑功能表。

[平行工作] 的內容功能表

排序工作

若要依據資料行準則排序工作,請按一下資料行標頭。 例如,按一下 [ID] 資料行標頭,就可以依據工作 ID:1,2,3,4,5 等排序工作。 若要反轉排序次序,請再按一下資料行標頭。 目前排序資料行和排序次序是透過資料行上的箭號來表示。

群組工作

您可以根據清單檢視中的任何資料行,來群組工作。 例如,在 [狀態] 資料行標頭上按一下滑鼠右鍵,然後按一下 [依狀態群組],就可以群組所有具有相同狀態的工作。 例如,您可以快速查看等待中工作,以將焦點放在它們遭到封鎖的原因。 您也可以摺疊偵錯工作階段期間不感興趣的群組。 同樣地,您也可以依據其他資料行來進行群組。 只要按一下群組標頭旁邊的按鈕,就可以為群組加上 (取消) 旗標。 下圖顯示處於群組模式的 [平行工作] 視窗。

[平行工作] 的群組模式

父子式檢視

(此檢視僅適用於 Managed 程式碼)。在資料行標題上按一下滑鼠右鍵,然後按一下 [父子式檢視],就可以將工作清單變更為階層式檢視,其中,每個子工作都是可以在其父代下方顯示或隱藏的子節點。 下圖顯示父子式檢視中的工作。

[平行工作] 的 [父子式檢視]

為工作加上旗標

在工作清單項目上按一下滑鼠右鍵,然後按一下 [旗標],或是按一下第一個資料行中的旗標圖示,就可以為工作加上旗標。 如果您為多項工作加上旗標,則可以依據旗標資料行進行排序,以將所有加上旗標的工作帶至頂端,讓您可以只將焦點放在這些資料行。 您也可以使用 [平行堆疊] 視窗,只檢視加上旗標的工作。 這可讓您篩選出不想要進行偵錯的工作。 在偵錯工作階段之間不會持續保留旗標。

凍結和解除凍結工作

您可以凍結正在執行工作的執行緒,方法是在工作清單項目上按一下滑鼠右鍵,然後按一下 [凍結指派的執行緒] (如果工作已遭凍結,則命令是 [解除凍結指派的執行緒])。當您凍結執行緒時,就不會在逐步執行目前中斷點後面的程式碼時執行該執行緒。 [凍結這個執行緒以外的所有執行緒] 命令則會凍結所有執行緒,但不含正在執行工作清單項目的執行緒。

下圖顯示每個工作的其他功能表項目。

[平行工作] 的內容功能表

請參閱

工作

使用平行堆疊視窗

逐步解說:偵錯平行應用程式

概念

以 .NET Framework 進行平行程式設計

並行執行階段

其他資源

偵錯工具資料表

偵錯 Managed 程式碼

變更記錄

日期

記錄

原因

2011 年 3 月

新增有關偵錯工具如何報告死結的資訊。

資訊加強。