Spring Boot
เว็บแอปของฉันทำงานได้ดีและฉันต้องการดีบักผ่าน Eclipse
ดังนั้นเมื่อเปิดตัวดีบักเกอร์ Remote Java Application ฉันควรฟังพอร์ตใด และมีการตั้งค่าบนเว็บแอปของฉันหรือไม่ที่ฉันต้องตั้งค่าเพื่อเปิดใช้งานการดีบัก
Spring Boot
เว็บแอปของฉันทำงานได้ดีและฉันต้องการดีบักผ่าน Eclipse
ดังนั้นเมื่อเปิดตัวดีบักเกอร์ Remote Java Application ฉันควรฟังพอร์ตใด และมีการตั้งค่าบนเว็บแอปของฉันหรือไม่ที่ฉันต้องตั้งค่าเพื่อเปิดใช้งานการดีบัก
คำตอบ:
ทำไมคุณไม่คลิกขวาที่main()
วิธีการและเลือก"Debug As... Java Application"
?
มีส่วนที่19.2ใน Spring Boot Referenceที่บอกคุณเกี่ยวกับการเริ่มแอปพลิเคชันของคุณโดยเปิดใช้งานการสนับสนุนการดีบักระยะไกล
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
-jar target/myproject-0.0.1-SNAPSHOT.jar
หลังจากที่คุณเริ่มแอปพลิเคชันของคุณเพียงแค่เพิ่มการกำหนดค่า Remote Java Applicationในการกำหนดค่า Run / Debug เลือกพอร์ต / ที่อยู่ที่คุณกำหนดไว้เมื่อเริ่มต้นแอปจากนั้นคุณมีอิสระในการดีบัก
java -agentlib:jdwp=help
สถานะ "อินเทอร์เฟซ -Xrunjdwp รุ่นเก่ายังสามารถใช้งานได้ แต่จะถูกลบออกในอนาคต" แทนที่จะใช้-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
วิธีแก้ปัญหาที่ง่ายกว่า:
แทนที่จะพิมพ์mvn spring-boot:run
เพียงแค่พิมพ์mvnDebug spring-boot:run
คุณยังคงต้องแนบดีบักเกอร์ใน Eclipse โดยสร้าง Debug Configuration ใหม่สำหรับ "Remote Java Application" บนพอร์ตที่เกี่ยวข้อง
ฉันไม่จำเป็นต้องตั้งค่าการดีบักระยะไกลเพื่อให้มันใช้งานได้ฉันใช้ Maven
spring-boot::run
.NB. หาก IDE ของคุณมีปัญหาในการค้นหาซอร์สโค้ดของโปรเจ็กต์ของคุณเมื่อทำการดีบักแบบทีละบรรทัดให้ดูที่คำตอบ SO นี้เพื่อค้นหาวิธีแนบซอร์สโค้ดของคุณด้วยตนเองกับแอปพลิเคชันการดีบัก
หวังว่านี่จะช่วยใครสักคน!
สมมติว่าคุณทำตามคำแนะนำของ 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
เมื่อคุณเริ่มต้นแอพลิเคชันฤดูใบไม้ผลิ 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 จากแถบเครื่องมือเลือกRun -> Debug Configurations -> เลือกRemote Java Application -> คลิกปุ่มNew -> เลือกเป็น Connection Type Standard (Socket Attach)เป็น Host localhostและเป็น Port 8002 (หรืออะไรก็ได้ที่คุณมี กำหนดค่าในขั้นตอนก่อนหน้านี้) คลิกสมัครแล้วตรวจแก้จุดบกพร่อง
ตอนนี้ดีบักเกอร์ Eclipse ควรเชื่อมต่อกับรีโมตเซิร์ฟเวอร์ การเปลี่ยนไปใช้มุมมองการแก้ปัญหาควรแสดง JVM ที่เชื่อมต่อและเธรด เบรกพอยต์ควรเริ่มทำงานทันทีที่ถูกกระตุ้นจากระยะไกล
เรียกใช้คำสั่งด้านล่างที่pom.xml
วางไว้:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
และเริ่มแอปพลิเคชัน java ระยะไกลของคุณด้วยตัวเลือกการดีบักบนพอร์ต5005
Spring Boot 2.0.3.RELEASE
นี้ล้มเหลวที่จะรอการดีบักแนบบน
ทางออกที่ดีที่สุดในความคิดของฉันคือเพิ่มปลั๊กอินใน 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
คำสั่งเท่านั้นที่ทำได้
โปรดดูhttp://java.dzone.com/articles/how-debug-remote-java-applicatเพื่อเปิดใช้งานการดีบักระยะไกล หากคุณใช้ tomcat เพื่อรันแอปพลิเคชันของคุณให้เริ่ม tomcat ด้วยพารามิเตอร์การดีบักระยะไกลหรือคุณสามารถเริ่ม tomcat ด้วยการสนับสนุน JPDA โดยใช้คำสั่งต่อไป
Windows
<tomcat bin dir>/startup.bat jpda
*ห้าม
<tomcat bin dir>/startup.sh jpda
สิ่งนี้จะเปิดใช้งานการดีบักระยะไกลบนพอร์ต 8000
ด้วย eclipse หรือ IDE อื่น ๆ เพียงคลิกขวาที่แอปพลิเคชัน Spring Boot หลักของคุณแล้วคลิก "debug as java application"
คำถามนี้ได้รับคำตอบแล้ว แต่ฉันก็มีปัญหาเดียวกันในการดีบัก Springboot + gradle + jHipster
แอปพลิเคชัน Spring boot ส่วนใหญ่สามารถดีบักได้ด้วยการคลิกขวาและดีบัก แต่เมื่อคุณใช้ gradle การมีการตั้งค่าพารามิเตอร์สภาพแวดล้อมเพิ่มเติมจะไม่สามารถดีบักได้โดยตรง
เพื่อแก้ไขปัญหานี้ Eclipse ได้จัดเตรียมคุณลักษณะเพิ่มเติมหนึ่งอย่างเป็นRemote Java Application
โดยใช้คุณสมบัตินี้คุณสามารถดีบักแอปพลิเคชันของคุณ
ทำตามขั้นตอนด้านล่าง:
เรียกใช้แอปพลิเคชัน gradle ของคุณด้วย
./gradlew bootRun --debug-jvm
คำสั่ง
ตอนนี้ไปที่ eclipse -> คลิกขวาที่โปรเจ็กต์และการกำหนดค่าดีบัก -> แอปพลิเคชัน Java ระยะไกล
เพิ่มโฮสต์และพอร์ตของคุณเป็น localhost และพอร์ตเป็น 5005 (ค่าเริ่มต้นสำหรับการดีบักแบบ gradle คุณสามารถเปลี่ยนได้)
ดูรายละเอียดและขั้นตอนเพิ่มเติม
Right click on the spring boot project -> debug as -> spring boot App
. ใส่จุดดีบักเกอร์และเรียกใช้แอปจากลูกค้าเช่นบุรุษไปรษณีย์