マルチスレッドおよび非同期アプリケーションのデバッグ
マルチスレッドアプリケーションは、一度に複数のスレッドを追跡する必要があるため、デバッグが常に困難です。さらに、マルチスレッドアプリケーションでは、不均等なワークロード分散、ロック競合、シリアル実行など、新しいタイプのバグやパフォーマンスの問題が発生します。
デバッグセッションでステップ実行することによって得られるシーケンシャルフローの錯覚は、マルチスレッドアプリのデバッグには役に立たず、誤解を招く可能性があります。同時実行のバグである可能性のある問題を調査する場合は、シーケンシャルステップ実行よりもブレークポイントに頼る必要があります。たとえば、1 つのスレッドだけに焦点を当てる場合は、条件付きブレークポイントが非常に役立ちます。スレッドの一意のプロパティ (スレッド ID など) を使用してブレークポイントをトリガーします。データブレークポイントは、特定のオブジェクトのマークされたプロパティがいずれかのスレッドによって変更されたときに実行を中断します。
マルチスレッドおよび非同期アプリケーションをデバッグするには、次の機能を使用します。
デバッグウィンドウのスレッドと変数タブでは、左側のペインにアプリケーションのすべてのスレッドが表示され、次のペインには選択したスレッドのすべてのスタックフレームが一覧表示されます。

デバッグウィンドウの並列スタックタブは、スレッドとそのスタックフレームをダイアグラムとして表示することで、スレッド分析を簡素化します。
デバッグウィンドウのタスクタブを使用すると、アプリケーションの現在の実行ポイントにおける
System.Threading.Tasks.TaskオブジェクトとValueTaskオブジェクトの状態に関する詳細情報を取得できます。現在のスレッドの ID は、エディター内の現在の実行ポイントに沿って表示されます。
スレッドの凍結と解凍
スレッドの実行順序を制御するには、特定のスレッドを一時停止 (フリーズ) および再開 (フリーズ解除) することができます。この手法は、デッドロック、競合状態、その他の同時実行の問題を調査できます。

関連ページ:
ブレークポイント
ブレークポイントを使用すると、特定のステートメントでプログラムの実行を一時停止し、変数値、コールスタック、その他のプログラムパラメーターを分析したり、式を評価したり、プログラムをステップ実行したりできます。JetBrains Rider では、次の型のブレークポイントを操作できます。行ブレークポイント、コード内の特定の文に設定できます。実行がこの行に達すると、デバッガーはプログラムの実行を中断します。行ブレークポイントは実行可能な行にのみ設定できます。コメント、宣言、空行は、行ブレークポイントの...
デバッグウィンドウ
デバッガーセッションを開始すると、デバッグツールウィンドウが開きます。このウィンドウを使用して、デバッガーセッションを制御し、プログラムデータ (フレーム、スレッド、変数など) を表示および分析し、デバッガーアクションを実行します。デフォルトでは、プログラムがブレークポイントに到達したときにデバッグツールウィンドウが開き、セッションが終了しても非表示になりません。この動作を変更するには、ビルド、実行、デプロイ | デバッガー設定ページに移動し、ブレークポイントでデバッグウィンドウを表示するチェ...
並列スタック
プログラム内のすべてのアクティブなスレッドを表示するデバッグウィンドウの並列スタックタブを選択します。エディターでスレッド ID をクリックします。以下は、多数のスレッドを開始する単純なアプリケーションのデバッグ中に並列スタックがどのように見えるかの例です。イメージに関する注意事項: 現在のスレッドの呼び出しパスは青色でハイライトされます。は、現在のスレッドの実行ポイントを示します。メソッドの近くのは、このメソッドでスレッドが停止したことを示します。2024 年 6 月 25 日マルチスレッドおよ...
「タスク」ビュー
アプリケーションの現在の実行ポイントにおけるオブジェクトとオブジェクトの状態に関する詳細情報を取得するには、タスクビューを使用します。プログラムが中断されるとすぐに、デバッグウィンドウの対応するタブでタスクを調べることができます。テーブルビューでは、すべてのタスクとその現在の状態およびその他の詳細を確認できます。特定のタスクのソースコードを見つけるには、そのタスクを右クリックし、タスクの最初の場所に移動するまたはタスクの現在の場所に移動するを選択します。右上隅のセレクターを使用してグラフビューに...
中断されたプログラムを調べる
フレームを分析することで、中断されたアプリケーションの状態を調べることができます。コードがデバッグモードで実行されている場合、それを一時停止するには 2 つの方法があります。検査するコード内のブレークポイントの設定で、いずれかがヒットするまで待機します。でプログラムの実行を中断します。デバッガーは、一時停止した瞬間に実行中のステートメントを終了し、次に実行する必要のあるステートメントで停止します。一時停止状態では、現在の実行ポイント(次に実行されるステートメント)は、エディターの左側のガターにあ...
デバッグ中に .NET メモリを探索する
JetBrains Rider を使用すると、デバッグ中にマネージドヒープを調べて、アプリケーションで使用されているメモリ空間を調べることができます。デバッガーがブレークポイントに到達すると、デバッグウィンドウの別のタブでメモリビューを開くことができます。グリッドをクリックすると、JetBrains Rider にはヒープ内のオブジェクトの総数が完全な型名、オブジェクトの数、消費されたバイト数でグループ化されて表示されます。メモリビューは、ブレークポイント間のオブジェクト数の違いを追跡します。た...