マルチスレッドアプリケーションのデバッグ
マルチスレッドアプリケーションは、一度に複数のスレッドを追跡する必要があるため、デバッグは常に困難です。さらに、マルチスレッドアプリケーションでは、不均一なワークロード分散、ロック競合、シリアライズされた実行などの新しいタイプのバグやパフォーマンスの問題が発生します。
デバッグセッションのステップ実行から得られるシーケンシャルフローのような錯覚は、マルチスレッドアプリのデバッグ中は役に立たず、誤解を招く可能性があります。同時実行のバグとなる可能性のある問題を調査する場合は、逐次ステップではなくブレークポイントに依存する必要があります。例: 条件付きブレークポイントは、1 つのスレッドのみに集中したい場合に非常に役立ちます。スレッドの一意のプロパティ(スレッド ID など)を使用してブレークポイントをトリガーするだけです。データブレークポイントは、特定のオブジェクトのマークされたプロパティがスレッドによって変更されたときに実行を中断します。
JetBrains Rider は、マルチスレッドアプリケーションのデバッグを簡略化する次の機能を提供します。
デバッグウィンドウのデバッガータブでは、左側のペインにアプリケーションのすべてのスレッドが表示され、次のペインには選択したスレッドのすべてのスタックフレームが一覧表示されます。
デバッグウィンドウの並列スタックタブは、スレッドとそのスタックフレームをダイアグラムとして表示することで、スレッド分析を簡素化します。
現在のスレッドの ID は、エディター内の現在の実行ポイントに沿って表示されます。
並列スタック
プログラム内のすべてのアクティブなスレッドを表示する
デバッグウィンドウの並列スタックタブをクリックします。
エディターでスレッド ID をクリックします。
以下は、多数のスレッドを開始する単純なアプリケーションのデバッグ中に並列スタックがどのように見えるかの例です。
![JetBrains Rider: 並列スタック JetBrains Rider: Parallel stacks](https://resources.jetbrains.com/help/img/rider/2024.1/debug_parallel_stacks.png)
イメージに関する注意事項:
現在のスレッドの呼び出しパスは青色でハイライトされます。
は、現在のスレッドの実行ポイントを示します。
メソッドの近くの
は、このメソッドでスレッドが停止したことを示します。
関連ページ:
![](https://resources.jetbrains.com/help/img/rider/2024.1/breakpoint_condition_example.png)
ブレークポイント
ブレークポイントを使用すると、特定のステートメントでプログラムの実行を一時停止し、変数値、コールスタック、その他のプログラムパラメーターを分析したり、式を評価したり、プログラムをステップ実行したりできます。JetBrains Rider では、次の型のブレークポイントを操作できます。行ブレークポイント、コード内の特定の文に設定できます。実行がこの行に達すると、デバッガーはプログラムの実行を中断します。行ブレークポイントは実行可能な行にのみ設定できます。コメント、宣言、空行は、行ブレークポイントの...
![](https://resources.jetbrains.com/help/img/rider/2024.1/rider_debug_window.png)
デバッグウィンドウ
デバッガーセッションを開始すると、デバッグツールウィンドウが表示されます。このウィンドウを使用して、デバッガーセッションを制御し、プログラムデータ(フレーム、スレッド、変数など)を表示して分析し、さまざまなデバッガーアクションを実行します。これは、デバッグツールウィンドウの概要です。ツールウィンドウの使用に関する一般的な手順については、ツールウィンドウを参照してください。ツールウィンドウのタブを切り替えるには、とを押します。セッション:複数のデバッグセッションを同時に実行すると、それらはデ
![](https://resources.jetbrains.com/help/img/rider/2024.1/debug_frames_pane.png)
中断されたプログラムを調べる
フレームを分析することで、中断されたアプリケーションの状態を調べることができます。コードがデバッグモードで実行されている場合、それを一時停止するには 2 つの方法があります。検査するコード内のブレークポイントの設定で、いずれかがヒットするまで待機します。でプログラムの実行を中断します。デバッガーは、一時停止した瞬間に実行中のステートメントを終了し、次に実行する必要のあるステートメントで停止します。一時停止状態では、現在の実行ポイント(次に実行されるステートメント)は、エディターの左側のガターにあ...
![](https://pleiades.io/icons/rider.png)
デバッグ中に .NET メモリを探索する
JetBrains Rider を使用すると、デバッグ中にマネージドヒープを調べて、アプリケーションで使用されているメモリ空間を調べることができます。デバッガーがブレークポイントに到達すると、デバッグウィンドウの別のタブでメモリビューを開くことができます。グリッドをクリックすると、JetBrains Rider にはヒープ内のオブジェクトの総数が完全な型名、オブジェクトの数、消費されたバイト数でグループ化されて表示されます。メモリビューは、ブレークポイント間のオブジェクト数の違いを追跡します。た...
![](https://resources.jetbrains.com/help/img/rider/2024.1/ssh_remote_debugging_new_project.png)
SSH 経由でリモートアプリケーションをデバッグする
このチュートリアルでは、SSH トンネルを使用して、開発マシンとリモートホストの間に安全な接続を設定し、そこで実行されている Web アプリケーションをデバッグする方法を説明します。リモートホストに SSH サーバーをセットアップする:リモートホストが実行しているオペレーティングシステムに応じて、リモートホストへの SSH アクセスを構成します。リモートデバッグ用に JetBrains SSH サーバーをインストールして構成します。リモートホストで SSH を迅速かつ安全に開始し、ホストへのア...