IntelliJIDEAを使用したリモートデバッグ
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のにあります。