EclipseでSpring Bootアプリケーションをデバッグする方法は?


100

私のSpring Bootwebappは問題なく実行されています。Eclipseを使用してデバッグしたいと思います。

それでは、リモートJavaアプリケーションデバッガーを起動するときに、どのポートをリッスンする必要がありますか?そして、デバッグを有効にするために設定する必要がある私のwebappの設定はありますか?


Linux Mint 18 SarahのSTS 3.9.4.RELEASEでは、Spring Bootアプリケーションをデバッグするためにデバッグパースペクティブに移動する必要があります。
TimeTrap

回答:


167

main()メソッドを右クリックして選択し"Debug As... Java Application"ませんか?


それを考えていなかった。残りのアプリをテストしています。それを起動し、それから私のブラウザで異なる設定でそれを打ちます。
JeffLL 2014年

8
サーバー上でリモートで実行されているアプリケーションをデバッグする必要がある場合がありますが、これは当てはまりません。
Cuga

うまくいきませんでした。「エディターにはメインタイプが含まれていません」
Raj

あなたは「main()メソッドを右クリック」しなかったと思いますか?
Dave Syer 2016年

4
私の状況は違いますが、Mainを直接実行すると、いくつかのSpring構成ファイル、つまりbootstrap.xmlが直接取得されず、maven spring-boot:runとして実行するように切り替える必要がありました。しかし、問題は、このMavenの目標をEclipseから実行している場合でも、デバッグできないことです。
sanjay patel 2016

91

Spring Boot Referenceセクション19.2に、リモートデバッグサポートを有効にしてアプリケーションを起動する方法が記載されています。

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
   -jar target/myproject-0.0.1-SNAPSHOT.jar

アプリケーションを開始したら、そのリモートJavaアプリケーション構成を[実行/デバッグ]構成に追加し、アプリの開始時に定義したポート/アドレスを選択するだけで、自由にデバッグできます。


これでうまくいきました。ありがとう!Eclipseが私のスプリングブートプロジェクトをデバッグできませんでした(Mainクラスが見つからないという不平を言い続けました)。
user6123723 2014年

4
Java 8(他のバージョンについては知りません)java -agentlib:jdwp=helpでは、「古い-Xrunjdwpインターフェースは引き続き使用できますが、将来のリリースで削除される」という状態で実行されることに注意してください。代わりに使用する-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Paul

23

より簡単なソリューション:

入力する代わりにmvn spring-boot:run、単に入力mvnDebug spring-boot:run

関連するポートで「リモートJavaアプリケーション」の新しいデバッグ構成を作成することにより、Eclipseでデバッガをアタッチする必要があります。


3
次に、デフォルト以外のポート番号をどのように指定しますか?
ステファン

19

これを機能させるためにリモートデバッグをセットアップする必要はありませんでした。Mavenを使用しました。

  1. MavenプラグインがEclipseにインストールされていることを確認します。
  2. 実行」>「実行構成」>「Mavenビルド」>「新しい起動構成」をクリックします
    • ベースディレクトリ:プロジェクトのルートを参照します
    • 目標:spring-boot::run
  3. [ 適用 ]をクリックし、[ 実行 ]をクリックします

NB。行ごとのデバッグを行うときにIDEでプロジェクトのソースコードを見つけるのに問題がある場合は、このSO回答を見て、ソースコードをデバッグアプリケーションに手動で接続する方法を見つけてください。

これが誰かを助けることを願っています!


spring-boot:runでサーバーを実行している場合、コンソールウィンドウで赤いアイコンを押すだけではサーバーを停止できません。
Shailesh Pratapwar

私はそれをそのように停止できます(netstatをインストールする必要があるかもしれませんが、バイナリを配布したか、Cygwinが付属していたか、またはWindowsの一部が今は忘れます):netstat -ano | grep "9999"-Windows taskkill / F / PID 36308で36308タスクIDを返します
armyofda12mnkeys

19

リモートステージングまたはプロダクションSpring Bootアプリケーションをデバッグする方法

サーバ側

Spring Bootアプリケーションをサービスとして設定するSpring Bootのガイドに従っていると仮定します。アプリケーションアーティファクトはにあり/srv/my-app/my-app.war、設定ファイルが付属しています/srv/my-app/my-app.conf

# This is file my-app.conf
# What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script
# (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script
# gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that
# we can also do in a regular shell script.

JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n"
export SPRING_PROFILES_ACTIVE=staging

Spring Bootアプリケーションをsudo service my-app restartで再起動すると、ログファイルのに/var/log/my-app.logある行にとあるはずListening for transport dt_socket at address: 8002です。

クライアント側(開発者マシン)

サーバーへのSSHポート転送トンネルを開きますssh -L 8002:localhost:8002 myusername@staging.example.com。このSSHセッションを実行し続けます。

Eclipseで、ツールバーから[ 実行] -> [ デバッグ構成] -> [ リモートJavaアプリケーション ]を選択-> [ 新規 ]ボタンをクリック-> [接続タイプ標準(ソケット接続) ]、[ ホストローカルホスト]、[ ポート8002](または、前の手順で構成されました)。[ 適用]、[ デバッグ]の順にクリックします。

これで、Eclipseデバッガーがリモートサーバーに接続されます。デバッグパースペクティブに切り替えると、接続されているJVMとそのスレッドが表示されます。ブレークポイントは、リモートでトリガーされるとすぐに起動する必要があります。


ポートフォワーディングとトンネリングは私が欠けていたビットでした。た。あなたがインターネットベースのサーバーにデバッグしているなら、アマゾンで言うと重要です。
PaulNUK

14

以下のコマンドを実行しますpom.xml

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

ポートのデバッグオプションを使用してリモートJavaアプリケーションを起動します5005


2
これはデバッガがに接続するのを待つことに失敗しますSpring Boot 2.0.3.RELEASE
ステファン

10

私の意見では、最良の解決策はpom.xmlにプラグインを追加することであり、常に他に何もする必要はありません。

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

しかし、その後、コマンドmvn clean installがデバッガーをトリガーし、ビルドがハングします。mvnDebug clean installコマンドだけがそうするなら、それはクールです。
ステファン

1
@Stephane、この構成はおそらく、簡単に有効化できる特定のプロファイルにあるはずです
davidxxx

4
  • プロジェクトを右クリックして、「Debug As => Java application or Spring boot App」を選択します-capture1- ここに画像の説明を入力してください
  • アプリのどこかでアプリを一時停止したい場合は、左側をダブルクリックすると、次のようなキャプチャが表示されます2。 ここに画像の説明を入力してください
  • 次に、アプリを起動するときに、これらの矢印を使用して次に進みます。(キャプチャー3) ここに画像の説明を入力してください

これはタイトルの質問に対する良い答えです。ただし、説明にはより具体的で異なる質問があり、別の答えが必要です。
Thor Hovden、

そのため、私はMyEclispeを使用しており、[デバッグ]-> [Spring Boot App]オプションが利用可能であり、正常に機能していました。Eclipse Oxygenを使用していないため、Spring Boot Appメニュー項目が使用できなくなりました。これを取得するには、Eclipse用のプラグインをインストールする必要がありますか?
Kachopsticks

3

Right click on the spring boot project -> debug as -> spring boot App。デバッガーポイントを配置し、postmanなどのクライアントからアプリを呼び出す


2

リモートデバッグを有効にするには、http://java.dzone.com/articles/how-debug-remote-java-applicatを参照してください。tomcatを使用してアプリケーションを実行している場合は、リモートデバッグパラメーターを使用してtomcatを開始するか、次のコマンドを使用してJPDAサポートを使用してtomcatを開始できます。

ウィンドウズ

<tomcat bin dir>/startup.bat jpda

* nix

<tomcat bin dir>/startup.sh jpda

これにより、ポート8000​​でリモートデバッグが有効になります


2

Eclipseまたはその他のIDEを使用して、メインのスプリングブートアプリケーションを右クリックし、[Javaアプリケーションとしてデバッグ]をクリックします。


2

この質問はすでに回答されていますが、Springboot + gradle + jHipsterをデバッグするために同じ問題が発生しました、

ほとんどの場合、Springブートアプリケーションは右クリックでデバッグできますが、gradleを使用する場合、追加の環境パラメーターを設定すると、直接デバッグすることはできません。

これを解決するために、EclipseはリモートJavaアプリケーションとして1つの追加機能を提供しました

この機能を使用すると、アプリケーションをデバッグできます。

以下の手順に従ってください:

./gradlew bootRun --debug-jvmコマンドでgradleアプリケーションを実行する

Eclipse->プロジェクトを右クリックして、Debug configuration-> Remote Java Applicationに移動します。

ホストとポートをlocalhostとして追加し、ポートを5005として追加します(gradleデバッグのデフォルト、変更できます)

詳細と手順については、参照してください


0

Spring Bootアプリケーションのメインクラスファイルを右クリック-> [ デバッグオプション]を選択-> [ Javaアプリケーションを選択]

ここに画像の説明を入力してください これで、ブレークポイントを使用してアプリケーションをデバッグできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.