ウィンドウの使用
[並列スタック] ウィンドウは、マルチスレッド アプリケーションをデバッグする際に役立ちます。 このウィンドウのスレッド ビューには、アプリケーションのすべてのスレッドの呼び出し履歴情報が表示されます。 これを使用して、スレッドとそれらのスレッドのスタック フレームの間を移動できます。 マネージ コードのタスク ビューには、System.Threading.Tasks.Task オブジェクトの呼び出し履歴が表示されます。 ネイティブ コードのタスク ビューには、タスク グループ、並列アルゴリズム、非同期エージェント、および軽量タスクの呼び出し履歴が表示されます。
スレッド ビュー
次の図は、Main から A、B の順に移行した後に外部コードに移った 1 つのスレッドと、 同じ外部コードから始まり A に移行した他の 2 つのスレッドを示しています。そのうちの 1 つは、その後 B を経て外部コードに移り、もう一方は C を経て AnonymousMethod に移っています。
図に示すように、現在のスレッドの呼び出しパスは青で強調表示され、アクティブなスタック フレームは黄色の矢印で示されます。 現在のスタック フレームを変更するには、[並列スタック] ウィンドウで別のメソッドを選択します。 このとき、選択したメソッドが既に現在のスレッドの一部であるか別のスレッドの一部であるかに応じて、現在のスレッドも切り替わる場合があります。 次の表に、[並列スタック] ウィンドウの主な機能を示します。説明は上記の図と対応しています。
コールアウトの文字 |
要素名 |
説明 |
---|---|---|
A |
呼び出し履歴のセグメントまたはノード |
1 つ以上のスレッドの一連のメソッドのコンテキストが含まれます。 ノードに矢印の線が結ばれていない場合は、スレッドのすべての呼び出しパスを表します。 |
B |
青の強調表示 |
現在のスレッドの呼び出しパスを示します。 |
C |
矢印の線 |
ノードを結び、スレッドのすべての呼び出しパスを構成します。 |
D |
ノードのヘッダーのツールヒント |
呼び出しパスがこのノードを共有する各スレッドの ID とユーザー定義名を示します。 |
E |
メソッドのコンテキスト |
同じメソッド内の 1 つ以上のスタック フレームを表します。 |
F |
メソッドのコンテキストのツールヒント |
メソッドのコンテキストが表すすべてのスタック フレームの詳細を示します。 現在のスレッドのスタック フレームは太字で示されます。 |
また、グラフが大きすぎてウィンドウに収まらない場合は、[並列スタック] ウィンドウのメイン ペインに [バード アイ ビュー] アイコンが表示されます。 このアイコンをクリックすると、ウィンドウ内にグラフ全体を表示できます。
メソッドのコンテキストのアイコン
アクティブなスタック フレームと現在のスタック フレームに関する情報を示すアイコンを次の表に示します。
アイコン |
説明 |
メソッドのコンテキストに現在のスレッドのアクティブなスタック フレームが含まれていることを示します。 |
|
メソッドのコンテキストに現在のスレッド以外のアクティブなスタック フレームが含まれていることを示します。 |
|
メソッドのコンテキストに現在のスタック フレームが含まれていることを示します。 対応するメソッド名は、表示されるすべてのノードで太字で表されます。 |
ツール バー コントロール
次の図と表は、[並列スタック] のツール バーで使用できるコントロールを示したものです。
コールアウトの文字 |
Control |
説明 |
---|---|---|
A |
[スレッド]/[タスク] ボックス |
スレッドの呼び出し履歴とタスクの呼び出し履歴の表示を切り替えます。 詳細については、「タスク ビュー」および「スレッド ビュー」を参照してください。 |
B |
[フラグが設定されたもののみを表示] |
[スレッド] ウィンドウまたは [並列タスク] ウィンドウでフラグが設定されたスレッド (またはタスク) の呼び出し履歴だけを表示します。 |
C |
[メソッド ビューの切り替え] |
スタック ビューとメソッド ビューを切り替えます。 詳細については、「メソッド ビュー」を参照してください。 |
D |
[現在のスタック フレームに自動スクロール] |
現在のスタック フレームがビューに表示されるように図を自動でスクロールします。 この機能は、他のウィンドウから現在のスタック フレームを変更する場合や、大きなダイアグラム内で新しいブレークポイントにヒットした場合に役立ちます。 |
E |
[ズーム コントロールの切り替え] |
ズーム コントロールの表示と非表示を切り替えます。 ズーム コントロールを表示しているかどうかに関係なく、Ctrl キーを押しながらマウス ホイールを回転させて拡大または縮小することもできます。 |
コンテキスト メニュー項目
次の図と表は、スレッド ビューまたはタスク ビューでメソッドのコンテキストを右クリックしたときに使用できるショートカット メニュー項目を示したものです。 最後の 6 つの項目は、[呼び出し履歴] ウィンドウの機能をそのまま使用したものであり、動作も同じになります。
メニュー項目 |
説明 |
---|---|
[タスクに移動] ([スレッドに移動]) |
実行される機能はツール バーのボックスと同じですが、同じスタック フレームが強調表示されたままになります。 |
[フレームに切り替え] |
[呼び出し履歴] ウィンドウの対応するメニュー コマンドと同じです。 ただし、[並列スタック] では、複数のフレームが 1 つのメソッドのコンテキストに対応する場合があります。 そのため、このメニュー項目には、それぞれ特定のスタック フレームを表すサブメニューがあります。 現在のスレッドのスタック フレームが 1 つだけの場合は、そのスタック フレームに対応するメニューが選択されます。 |
[ソース コードへ移動] |
ユーザーが右クリックしたスタック フレームに対応するソース コード内の位置に移動します。 |
[逆アセンブルを表示] |
ユーザーが右クリックしたスタック フレームに対応する逆アセンブル ウィンドウ内の位置に移動します。 |
[外部コードの表示] |
外部コードの表示と非表示を切り替えます。 |
[16 進数で表示] |
10 進数と 16 進数の表示を切り替えます。 |
[シンボルの読み込み情報] |
対応するダイアログ ボックスを表示します。 |
[シンボルの設定] |
対応するダイアログ ボックスを表示します。 |
タスク ビュー
アプリケーションで System.Threading.Tasks.Task オブジェクト (マネージ コード) または task_handle オブジェクト (ネイティブ コード) を使用して並列処理を表している場合、[並列スタック] ウィンドウのツール バーにあるボックスを使用してタスク ビューに切り替えることができます。 タスク ビューには、スレッドではなくタスクの呼び出し履歴が表示されます。 タスク ビューがスレッド ビューと異なる点は次のとおりです。
タスクを実行していないスレッドの呼び出し履歴は表示されません。
タスクを実行しているスレッドの呼び出し履歴は上下の項目が非表示になり、タスクに関連する重要なフレームだけが表示されます。
1 つのスレッドに複数のタスクがある場合、それらのタスクの呼び出し履歴が個々のノードに分けられます。
次の図は、右側に [並列スタック] のタスク ビュー、左側に対応するスレッド ビューを示したものです。
すべての呼び出し履歴を表示するには、スタック フレームを右クリックし、[スレッドに移動] をクリックしてスレッド ビューに戻ります。
また、次の図では、タスク ビューのノードのヘッダーにそれらが表すタスクの状態が表示されています。 前の表で説明したように、ノードのヘッダーまたはメソッドのコンテキストにカーソルを置くと詳しい情報を表示できます。 次の図は、スレッド ビューおよびタスク ビューのツールヒントに表示される情報を示しています。
メソッド ビュー
スレッド ビューまたはタスク ビューでツール バーの [メソッド ビュー] アイコンをクリックすると、現在のメソッドを中心とするグラフを表示できます。 メソッド ビューを使用すると、現在のメソッドを呼び出すか現在のメソッドから呼び出されるすべてのスレッドのすべてのメソッドを一目で確認できます。 次の図は、スレッド ビューと共に、同じ情報がメソッド ビューではどのように表示されるかを示したものです。
新しいスタック フレームに切り替えると、そのメソッドが現在のメソッドになり、新しいメソッドのすべての呼び出し元と呼び出し先がウィンドウに表示されます。 これにより、そのメソッドが呼び出し履歴に含まれているかどうかに応じて、一部のスレッドの表示と非表示が切り替わる場合があります。 スタック ビューに戻るには、ツール バーの [メソッド ビュー] ボタンをもう一度クリックします。