web-dev-qa-db-ja.com

IntelliJ IDEA Community Editionでスプリングブートアプリケーションをデバッグする方法は?

IntelliJ Java community Edition上のIDEA spring-bootアプリケーションのデバッグに問題があります。主な問題は、IDEがブレークポイントで停止しないこと、プログラムが確実にブレークポイントで実行することです。 IntelliJ IDEAを作成してブレークポイントで停止するにはどうすればよいですか?

追加情報として、ここに私の実行構成があります:

次のコマンドを使用したMaven構成:spring-boot:run。起動する前に、プロジェクトをビルドします。

31
Ville Miekk-oja

動作させる唯一の方法は、別のリモートデバッグ構成を作成することでした。

そのため、構成の編集->リモート-> +に進みます。次に、intelliJを使用して通常どおりアプリケーションを起動します。次に、新しく作成されたリモート構成に切り替えます。実行する代わりに、デバッグを押します。これでデバッガーの準備が整い、ブレークポイントを設定でき、デバッガーはそれらに停止します。

2
Ville Miekk-oja

私にとって、これらのステップは機能します:

  1. [実行]メニューの[構成の編集...]を選択します。
  2. 新しいリモート構成を作成します。デフォルトでは、設定を変更する必要はありません。
    -agentlib:jdwp = transport = dt_socket、server = y、suspend = n、address = 5005。ただし、たとえば接続する前にJVMを一時停止する場合は、suspend = yを変更できます。または、ポートなどを変更できます。
  3. JVMバージョンに応じてコマンドラインをコピーし、構成を保存します。
  4. ターミナルウィンドウで(Mavenの使用例とJVM 1.5以降で)アプリを実行しますmvn clean spring-boot:run -Drun.jvmArguments = "-agentlib:jdwp = transport = dt_socket、server = y、suspend = n、address = 5005 "
  5. 手順2で作成したリモート構成を実行して、アプリに接続します。これで、アプリをデバッグできます。
39
piphonom

私のために働いた唯一のアプローチは、Intellij Ideaから直接アプリケーションを実行またはデバッグすることです。を含むクラスを開く

 public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

そして、マウスの右ボタンをクリックして、アプリケーションをデバッグします

36
stinger

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パラメーターを使用できます。

14
Abdullah Gürsu

私のビルドにSpring Dev Toolsを含めると、IntelliJデバッグが破損することがわかりました(上記の説明に従って)。この機能を使用しない場合は、ビルドから削除するだけです。

Mavenを使用している場合、pom.xmlから以下の行を削除する必要があります。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
9
Burton

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 を参照してください。

4
kite

残念なことに、すべての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ポートに転送します)

enter image description here

最後にIntelliJに戻り、実行メニューから以前に追加した構成を選択し、[デバッグ]ボタンをクリックします。ローカルのIntelliJ IDEAをプロジェクトのリモート展開に接続して、デバッグの準備ができました!!

enter image description here

3
Majid
  1. 次のように、アプリのpom.XMLでデバッグポートを有効にします。


    <plugin> <groupId> org.springframework.boot </ groupId> <configuration> <jvmArguments> -Xdebug -Xrunjdwp:transport = dt_socket、 server = y、suspend = y、address = 5005 </ jvmArguments> </ configuration> </ plugin>
  1. ville Miekk-oja sugestionに従う

    そのため、構成の編集->リモート-> +に進みます。次に、intelliJを使用して通常どおりアプリケーションを起動します。次に、新しく作成されたリモート構成に切り替えます。実行する代わりに、デバッグを押します。これでデバッガーの準備が整い、ブレークポイントを設定でき、デバッガーはそれらに停止します。

1
Gianluca Musa

intelliJ goto run->設定の編集-> '+'を押します-> 'Application'を選択します

フィールドに入力します:メインクラス、作業ディレクトリ、モジュールのクラスパス

1
Ziv.Ti