Bagaimana cara men-debug aplikasi Spring Boot dengan Eclipse?

100

Spring BootAplikasi web saya berjalan dengan baik, dan saya ingin men-debugnya melalui Eclipse.

Jadi saat meluncurkan debugger Aplikasi Java Jarak Jauh saya, port mana yang harus saya dengarkan? Dan apakah ada pengaturan di aplikasi web saya yang harus saya atur untuk mengaktifkan debugging?

JeffLL
sumber
Di STS 3.9.4.RELEASE di Linux Mint 18 Sarah saya harus masuk ke perspektif debug untuk men-debug aplikasi Spring Boot.
TimeTrap

Jawaban:

167

Mengapa Anda tidak mengklik kanan pada main()metode dan memilih "Debug As... Java Application"?

Dave Syer
sumber
Tidak terpikir olehnya. Saya sedang menguji aplikasi istirahat. Meluncurkannya, lalu menekannya dengan browser saya dengan konfigurasi yang berbeda.
JeffLL
8
Ada kalanya seseorang mungkin perlu men-debug aplikasi yang berjalan dari jarak jauh di server, di mana hal ini tidak berlaku.
Cuga
Itu tidak berhasil untuk saya. "Editor tidak berisi tipe utama"
Raj
Saya kira Anda tidak "klik kanan pada metode main ()"?
Dave Syer
4
Situasi saya berbeda, Menjalankan Main secara langsung tidak mengambil beberapa file konfigurasi pegas yaitu bootstrap.xml, maka saya harus beralih untuk menjalankannya sebagai maven spring-boot: run. Tetapi masalah dengan itu adalah jika meskipun Anda menjalankan tujuan maven ini dari gerhana itu tidak akan men-debugnya.
sanjay patel
91

Ada bagian 19.2 di Referensi Spring Boot yang memberi tahu Anda tentang memulai aplikasi Anda dengan dukungan debugging jarak jauh diaktifkan.

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

Setelah Anda memulai aplikasi, cukup tambahkan konfigurasi Aplikasi Java Jarak Jauh itu dalam konfigurasi Run / Debug, pilih port / alamat yang Anda tentukan saat memulai aplikasi, lalu Anda bebas untuk men-debug.

masster
sumber
Ini berhasil untuk saya. Terima kasih! Eclipse tidak dapat men-debug proyek boot musim semi saya (Terus mengeluh bahwa kelas Utama tidak dapat ditemukan).
pengguna6123723
4
Perhatikan bahwa dengan Java 8 (saya tidak tahu tentang versi lain) menjalankan java -agentlib:jdwp=helpstatus "Antarmuka -Xrunjdwp yang lebih lama masih dapat digunakan, tetapi akan dihapus di rilis mendatang". Sebaliknya gunakan-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Paul
23

Solusi yang lebih mudah:

Daripada mengetik mvn spring-boot:run, cukup ketikmvnDebug spring-boot:run

Anda masih perlu memasang debugger di Eclipse dengan membuat Konfigurasi Debug baru untuk "Aplikasi Java Jarak Jauh" di porta yang relevan.

Duran Wesley Harris
sumber
3
Bagaimana Anda kemudian menentukan nomor port selain yang default?
Stephane
19

Saya tidak perlu menyiapkan debugging jarak jauh agar ini berfungsi, saya menggunakan Maven.

  1. Pastikan Anda telah menginstal plugin Maven ke Eclipse.
  2. Klik Run> Run Configurations> Maven Build> konfigurasi peluncuran baru :
    • Direktori dasar: telusuri ke root proyek Anda
    • Tujuan: spring-boot::run.
  3. Klik Apply, lalu klik Run .

NB. Jika IDE Anda mengalami masalah dalam menemukan kode sumber proyek Anda saat melakukan debug baris demi baris, lihat jawaban SO ini untuk mengetahui cara melampirkan kode sumber Anda ke aplikasi debug secara manual.

Semoga ini bisa membantu seseorang!

Dawngerpony
sumber
Jika Anda menjalankan server dengan spring-boot: run, Anda tidak akan dapat menghentikannya hanya dengan menekan ikon Merah di jendela konsol.
Shailesh Pratapwar
Saya bisa menghentikannya seperti itu (mungkin perlu memasang netstat, saya lupa jika saya menggunakan biner atau datang dengan Cygwin, atau bagian dari windows sekarang): netstat -ano | grep "9999" - mengembalikan 36308 id tugas di Windows taskkill / F / PID
36308
19

Cara men-debug aplikasi pementasan jarak jauh atau produksi Spring Boot

Sisi server

Anggaplah Anda telah berhasil mengikuti panduan Spring Boot tentang menyiapkan aplikasi Spring Boot Anda sebagai layanan . Artefak aplikasi Anda berada /srv/my-app/my-app.war, disertai dengan file konfigurasi /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

Ketika Anda me-restart aplikasi Spring Boot Anda dengan sudo service my-app restart, maka di file log-nya yang terletak di /var/log/my-app.logseharusnya ada baris yang mengatakan Listening for transport dt_socket at address: 8002.

Sisi klien (mesin pengembang)

Buka SSH port-forwarding tunnel ke server: ssh -L 8002:localhost:8002 [email protected]. Biarkan sesi SSH ini tetap berjalan.

Di Eclipse, dari toolbar, pilih Run -> Debug Configurations -> pilih Remote Java Application -> klik tombol New -> pilih sebagai Connection Type Standard (Socket Attach) , sebagai Host localhost , dan sebagai Port 8002 (atau apa pun yang Anda miliki dikonfigurasi di langkah sebelumnya). Klik Apply dan kemudian Debug .

Debugger Eclipse sekarang harus terhubung ke server jarak jauh. Beralih ke perspektif Debug harus menunjukkan JVM yang terhubung dan utasnya. Breakpoint harus diaktifkan segera setelah dipicu dari jarak jauh.

Abdull
sumber
Port forwarding dan tunneling adalah sedikit yang saya lewatkan. Ta. Penting jika Anda men-debug ke server berbasis internet, katakanlah di Amazon.
PaulNUK
14

Jalankan di bawah perintah di mana pom.xmlditempatkan:

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

Dan mulai aplikasi java jarak jauh Anda dengan opsi debugging di port5005

Arpit Aggarwal
sumber
2
Ini gagal menunggu debugger untuk dipasang Spring Boot 2.0.3.RELEASE.
Stephane
10

Solusi terbaik menurut saya adalah menambahkan plugin di pom.xml, dan Anda tidak perlu melakukan hal lain sepanjang waktu:

<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>
krmanish007
sumber
Tapi kemudian perintah mvn clean installmemicu debugger dan build macet. Akan keren jika hanya mvnDebug clean installperintah yang melakukannya.
Stephane
1
@Stephane, konfigurasi ini mungkin harus dalam profil tertentu yang mudah diaktifkan
davidxxx
4
  • klik kanan pada proyek Anda dan pilih "Debug As => aplikasi Java atau Spring boot App" -capture1 - masukkan deskripsi gambar di sini
  • Jika Anda ingin aplikasi Anda berhenti sebentar di suatu tempat di aplikasi Anda, klik dua kali di sebelah kiri, Anda akan melihat gambar 2 ini. masukkan deskripsi gambar di sini
  • lalu saat Anda memulai aplikasi, gunakan panah tersebut untuk melanjutkan. (tangkapan 3) masukkan deskripsi gambar di sini
Abdelwahid Oubaalla
sumber
Ini adalah jawaban yang bagus untuk pertanyaan judul. Namun, uraian tersebut memiliki pertanyaan yang lebih spesifik dan berbeda, yang membutuhkan jawaban yang berbeda.
Thor Hovden
Jadi saya biasa menggunakan MyEclispe dan opsi Debug As -> Spring Boot App tersedia dan berfungsi dengan baik. Saya tidak menggunakan Eclipse Oxygen dan item menu Aplikasi Spring Boot tidak lagi tersedia. Apakah saya perlu menginstal plugin untuk eclipse untuk mendapatkan ini?
Kachopsticks
3

Right click on the spring boot project -> debug as -> spring boot App. Letakkan titik debugger dan aktifkan aplikasi dari klien seperti tukang pos

Tadele Ayelegn
sumber
2

Silakan lihat http://java.dzone.com/articles/how-debug-remote-java-applicat untuk mengaktifkan debugging jarak jauh. Jika Anda menggunakan tomcat untuk menjalankan aplikasi Anda, mulai tomcat dengan parameter debug jarak jauh atau Anda dapat memulai tomcat dengan dukungan JPDA dengan menggunakan perintah berikut.

Windows

<tomcat bin dir>/startup.bat jpda

* nix

<tomcat bin dir>/startup.sh jpda

ini akan mengaktifkan debugging jarak jauh pada port 8000

Sangram Jadhav
sumber
2

Dengan eclipse atau IDE lainnya, cukup klik kanan pada aplikasi spring boot utama Anda dan klik "debug as java application"

adia
sumber
2

Pertanyaan ini sudah terjawab, tetapi saya juga mendapat masalah yang sama untuk men-debug Springboot + gradle + jHipster,

Sebagian besar aplikasi boot Spring dapat men-debug dengan klik kanan dan debug, tetapi ketika Anda menggunakan gradle, memiliki beberapa pengaturan parameter lingkungan tambahan maka tidak mungkin untuk men-debug secara langsung.

Untuk mengatasinya, Eclipse menyediakan satu fitur tambahan sebagai Aplikasi Java Jarak Jauh

dengan menggunakan fitur ini, Anda dapat men-debug aplikasi Anda.

Ikuti langkah di bawah ini:

jalankan aplikasi gradle Anda dengan ./gradlew bootRun --debug-jvmperintah

Sekarang pergi ke eclipse -> proyek klik kanan dan konfigurasi Debug -> Aplikasi Java Jarak Jauh.

tambahkan host dan port Anda sebagai localhost dan porta sebagai 5005 (default untuk debug gradle, Anda dapat mengubahnya)

Lihat untuk detail dan langkah lebih lanjut.

bharatpatel
sumber
0

Klik kanan pada file kelas utama Aplikasi Spring Boot -> pilih opsi Debug As -> Pilih Aplikasi Java

masukkan deskripsi gambar di sini Sekarang Anda dapat menggunakan breakpoint untuk men-debug aplikasi.

Bishal Jaiswal
sumber