1. 序章

リモートデバッグにより、開発者はサーバーまたは別のプロセスの固有のバグを診断できます。 これは、これらの厄介なランタイムバグを追跡し、パフォーマンスのボトルネックとリソースシンクを特定する手段を提供します。

このチュートリアルでは、JetBrainsIntelliJIDEAを使用したリモートデバッグについて説明します。 まず、JVMを変更して、サンプルアプリケーションを準備しましょう。

2. JVMを構成します

a Springスケジューラサンプルアプリケーションを使用して、定期的にスケジュールされたタスクに簡単に接続してブレークポイントを追加します。

さらに、 IntelliJ IDEAは、構成の一部としてJVMパラメーターを提供します。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

2.1. JVMパラメータ

Java Debug Wire Protocol(JDWP)構成( jdwp = Transportation = dt_socket )の他に、サーバーサスペンド、およびアドレスが表示されます。パラメーター。

server パラメーターは、JVMをデバッガーのターゲットとして構成します。 suspend パラメーターは、起動前にデバッガークライアントが接続するのを待つようにJVMに指示します。 最後に、 address パラメーターは、ワイルドカードホストと宣言されたポートを使用します。

それでは、スケジューラアプリケーションを作成しましょう。

mvn clean package

それでは、 -agentlib:jdwpパラメーターを含めてアプリケーションを起動しましょう。

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \
  target/gs-scheduling-tasks-0.1.0.jar

ターミナルを開き、コマンドを実行します。 アプリケーションが起動したら、IntelliJに切り替えましょう。

3. IntelliJIDEAで構成を実行する

次に、IntelliJで、リモートデバッグ用の新しい実行構成を作成します。

アプリケーションが実行されたので、Debugボタンをクリックしてリモートデバッグセッションを開始しましょう。

4. リモートデバッグ

次に、 ScheduleTask ファイルを開き、次に示す36行目にブレークポイントを設定します。

public void reportCurrentTime() {
  log.info("The time is now {}", dateFormat.format(new Date()));
}

タスクは5秒ごとに実行されるため、追加するとすぐに停止します。 その結果、アプリケーション全体をステップスルーできるようになりました。

アプリケーションの起動の問題については、suspendフラグをnに変更し、Applicationのmainメソッドにブレークポイントを設定します。

4.1. 制限事項

リモートデバッグ時に、ログと出力が混乱することがあります。 ログはIDEコンソールに送信されないため、外部ログファイルを使用してIDEにマッピングし、より堅牢なデバッグ機能を実現できます。

また、リモートデバッグは非常に強力なツールですが、実稼働環境はデバッグの適切なターゲットではないことも覚えておいてください。

5. 結論

この記事で説明したように、IntelliJを使用したリモートデバッグは、いくつかの短い手順で簡単にセットアップして使用できます。

デバッグ用にアプリケーションJVMを構成する方法と、開発者ツールボックスにあるこの重要なツールのいくつかの制限について説明しました。

サンプルアプリケーションは、GitHubにあります。