IntelliJ Java community Edition上のIDEA spring-bootアプリケーションのデバッグに問題があります。主な問題は、IDEがブレークポイントで停止しないこと、プログラムが確実にブレークポイントで実行することです。 IntelliJ IDEAを作成してブレークポイントで停止するにはどうすればよいですか?
追加情報として、ここに私の実行構成があります:
次のコマンドを使用したMaven構成:spring-boot:run。起動する前に、プロジェクトをビルドします。
動作させる唯一の方法は、別のリモートデバッグ構成を作成することでした。
そのため、構成の編集->リモート-> +に進みます。次に、intelliJを使用して通常どおりアプリケーションを起動します。次に、新しく作成されたリモート構成に切り替えます。実行する代わりに、デバッグを押します。これでデバッガーの準備が整い、ブレークポイントを設定でき、デバッガーはそれらに停止します。
私にとって、これらのステップは機能します:
私のために働いた唯一のアプローチは、Intellij Ideaから直接アプリケーションを実行またはデバッグすることです。を含むクラスを開く
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
そして、マウスの右ボタンをクリックして、アプリケーションをデバッグします
tldr:次のようにコマンドラインを調整してみてください。
spring-boot:run -Dspring-boot.run.fork=false
説明:
アプリケーションをデバッグモードで実行する場合、IntelliJデバッガーは、Javaコマンドに適切なパラメーター、-agentlib:jdwp
などを追加することにより、自身を開始するJavaプロセスにアタッチします。ライン)。
多くの場合、これらのJavaプロセスは、新しいインスタンスをフォークする可能性があります。これは、同じパラメーターを取得しないnotであり、別のプロセスにあるため、デバッガに接続されています。これはわかりにくいかもしれません。
spring-boot:run
Mavenの目標は、新しいJVMのフォークに加えて、さらに混乱を引き起こします。これは、取得するオプションなどに応じて、フォークする場合としない場合があるためです。これの一部は documentation で見つけることができますが、必ずしも明らかではありません。
最初に、Javaプロセスが実際にデバッグされているかどうかを確認する必要があります。 IntelliJからアプリケーションを起動すると、[実行/デバッグ]タブにメッセージがスクロールして表示されます。上部には、実行されているコマンドラインがあります。デバッガのパラメータ(-agentlib:jdwp
など)が含まれている必要があり、その後に「ターゲットVMに接続されました」というメッセージが続きます。
次に、JVMがフォークされているかどうか不明な場合は、OSのプロセスリストを確認できます。たとえば、MacOSおよび* nixでは、ps aux | grep Java
を使用できます。 Javaプロセスには通常、巨大なパラメーターリストがあり、そのほとんどはクラスパスです。実行されている実際のアプリケーションは、コマンドラインの最後にあります。 JVMがフォークされた場合、Mavenゴールを実行しているプロセスと、Springアプリケーションを実行しているプロセスがあります。その後、デバッガーは、notに関心のあるプロセスに接続され、ブレークポイントは機能しません。
spring-boot:run
の分岐を停止するには、上記のfork
パラメーターを使用できます。
私のビルドにSpring Dev Toolsを含めると、IntelliJデバッグが破損することがわかりました(上記の説明に従って)。この機能を使用しない場合は、ビルドから削除するだけです。
Mavenを使用している場合、pom.xmlから以下の行を削除する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
piphonomのanwserは良いですが、もう少し行う必要があります。これは、このようにjvmArgumentsをmavenプラグインに追加します
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
</configuration>
</plugin>
スプリングブートプロジェクトのリモートデバッグの詳細については、 this を参照してください。
残念なことに、すべてのprevoiusの回答は不完全です。 IntelliJでリモートデバッグの正しい方法を見つけるのに多くの時間を費やしてきましたが、ここに完全な説明があります。
プロジェクトコードはローカルマシン(Windows OS)にあり、サーバー(またはVMWareワークステーション)のUbuntu VMにプロジェクトを展開していると想定しています。そして、これら2つのマシンは同じネットワーク内にあります(お互いにpingを実行できます)
まず、メニューの「実行」>「構成の編集」を使用して新しい実行/デバッグ構成を追加し、左上の「+」ボタンを押して「リモート」オプションを選択します。構成パラメーターをそのままにして、新しい構成の名前を定義するだけです。
次に、PuTTYを開き、SSH経由でリモートサーバーに接続します。以下のコマンドを実行して、リモートデバッグ機能をPuTTYターミナルのプロジェクトに追加します。
export Java_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
(同じPuTTYセッションで)リモートサーバー上のプロジェクトのルートディレクトリに移動し、通常使用するコマンドを使用して実行します(たとえば次のようになります)。
mvn -U clean spring-boot:run
ここで、誰もがここで無視した最も重要な部分が来る:)
PuTTYセッションウィンドウの上部を右クリックし、[設定の変更...]オプションを選択します。左側のオプションツリーで[接続]、[SSH]、[トンネル]の順に移動します。次に、次の図のような2つのポート転送レコードを追加します(1つはローカル、ローカルポート5005ポートを同じポート番号でリモートサーバーIPに転送し、もう1つはリモート5005ポートをローカルホストマシンの5005ポートに転送します)
最後にIntelliJに戻り、実行メニューから以前に追加した構成を選択し、[デバッグ]ボタンをクリックします。ローカルのIntelliJ IDEAをプロジェクトのリモート展開に接続して、デバッグの準備ができました!!
次のように、アプリのpom.XMLでデバッグポートを有効にします。
<plugin> <groupId> org.springframework.boot </ groupId> <configuration> <jvmArguments> -Xdebug -Xrunjdwp:transport = dt_socket、 server = y、suspend = y、address = 5005 </ jvmArguments> </ configuration> </ plugin>
そのため、構成の編集->リモート-> +に進みます。次に、intelliJを使用して通常どおりアプリケーションを起動します。次に、新しく作成されたリモート構成に切り替えます。実行する代わりに、デバッグを押します。これでデバッガーの準備が整い、ブレークポイントを設定でき、デバッガーはそれらに停止します。
intelliJ goto run->設定の編集-> '+'を押します-> 'Application'を選択します
フィールドに入力します:メインクラス、作業ディレクトリ、モジュールのクラスパス