Spring Boot
Ứng dụng web của tôi đang chạy tốt và tôi muốn gỡ lỗi nó thông qua Eclipse.
Vì vậy, khi khởi chạy trình gỡ lỗi Ứng dụng Java Từ xa, tôi nên nghe cổng nào? Và có cài đặt nào trên ứng dụng web của tôi mà tôi phải đặt để bật gỡ lỗi không?
Spring Boot
Ứng dụng web của tôi đang chạy tốt và tôi muốn gỡ lỗi nó thông qua Eclipse.
Vì vậy, khi khởi chạy trình gỡ lỗi Ứng dụng Java Từ xa, tôi nên nghe cổng nào? Và có cài đặt nào trên ứng dụng web của tôi mà tôi phải đặt để bật gỡ lỗi không?
Câu trả lời:
Tại sao bạn không chỉ cần nhấp chuột phải vào main()
phương thức và chọn "Debug As... Java Application"
?
Có phần 19.2 trong Tham chiếu khởi động mùa xuân cho bạn biết về cách khởi động ứng dụng của mình với hỗ trợ gỡ lỗi từ xa được bật.
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
-jar target/myproject-0.0.1-SNAPSHOT.jar
Sau khi bạn khởi động ứng dụng của mình, chỉ cần thêm cấu hình Ứng dụng Java Từ xa đó trong cấu hình Chạy / Gỡ lỗi, chọn cổng / địa chỉ bạn đã xác định khi khởi động ứng dụng và sau đó bạn có thể tự do gỡ lỗi.
java -agentlib:jdwp=help
trạng thái "Giao diện -Xrunjdwp cũ hơn vẫn có thể được sử dụng, nhưng sẽ bị xóa trong bản phát hành trong tương lai". Thay vào đó, hãy sử dụng-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Giải pháp dễ dàng hơn:
Thay vì nhập mvn spring-boot:run
, chỉ cần gõmvnDebug spring-boot:run
Bạn vẫn cần đính kèm trình gỡ lỗi trong Eclipse bằng cách tạo Cấu hình gỡ lỗi mới cho "Ứng dụng Java từ xa" trên cổng liên quan.
Tôi không cần thiết lập gỡ lỗi từ xa để làm việc này, tôi đã sử dụng Maven.
spring-boot::run
.NB. Nếu IDE của bạn gặp sự cố khi tìm mã nguồn của dự án khi thực hiện gỡ lỗi từng dòng, hãy xem câu trả lời SO này để tìm hiểu cách đính kèm mã nguồn của bạn vào ứng dụng gỡ lỗi theo cách thủ công.
Hy vọng điều này sẽ giúp ai đó!
Giả sử bạn đã làm theo thành công hướng dẫn của Spring Boot về cách thiết lập ứng dụng Spring Boot của bạn như một dịch vụ . Phần mềm ứng dụng của bạn nằm trong /srv/my-app/my-app.war
, kèm theo tệp cấu hình /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
Khi bạn khởi động lại ứng dụng Spring Boot của mình bằng sudo service my-app restart
, thì trong tệp nhật ký của nó nằm tại /var/log/my-app.log
sẽ có một dòng cho biết Listening for transport dt_socket at address: 8002
.
Mở một SSH tunnel port-forwarding đến máy chủ: ssh -L 8002:localhost:8002 myusername@staging.example.com
. Giữ cho phiên SSH này chạy.
Trong Eclipse, từ thanh công cụ, chọn Run -> Debug Configurations -> chọn Remote Java Application -> nhấp vào nút New -> chọn là Connection Type Standard (Socket Attach) , như Host localhost và Port 8002 (hoặc bất kỳ thứ gì bạn có đã cấu hình ở các bước trước). Nhấp vào Áp dụng và sau đó Gỡ lỗi .
Trình gỡ lỗi Eclipse bây giờ sẽ kết nối với máy chủ từ xa. Chuyển sang phối cảnh Gỡ lỗi sẽ hiển thị JVM được kết nối và các luồng của nó. Các điểm ngắt sẽ kích hoạt ngay sau khi chúng được kích hoạt từ xa.
Chạy lệnh dưới đây nơi pom.xml
được đặt:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
Và khởi động ứng dụng java từ xa của bạn với tùy chọn gỡ lỗi trên cổng5005
Spring Boot 2.0.3.RELEASE
.
Giải pháp tốt nhất theo ý kiến của tôi là thêm một plugin vào pom.xml và bạn không cần phải làm bất cứ điều gì khác mọi lúc:
<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
kích hoạt trình gỡ lỗi và bản dựng bị treo. Sẽ thật tuyệt nếu chỉ mvnDebug clean install
lệnh làm như vậy.
Right click on the spring boot project -> debug as -> spring boot App
. Đặt một điểm gỡ lỗi và gọi ứng dụng từ một khách hàng như người đưa thư
Vui lòng xem http://java.dzone.com/articles/how-debug-remote-java-applicat để kích hoạt gỡ lỗi từ xa. Nếu bạn đang sử dụng tomcat để chạy ứng dụng của mình, hãy khởi động tomcat với các tham số gỡ lỗi từ xa hoặc bạn có thể khởi động tomcat với hỗ trợ JPDA bằng cách sử dụng lệnh sau.
các cửa sổ
<tomcat bin dir>/startup.bat jpda
* nix
<tomcat bin dir>/startup.sh jpda
điều này sẽ cho phép gỡ lỗi từ xa trên cổng 8000
Câu hỏi này đã được trả lời, nhưng tôi cũng gặp phải vấn đề tương tự khi gỡ lỗi Springboot + gradle + jHipster,
Hầu hết ứng dụng khởi động Spring có thể gỡ lỗi bằng cách nhấp chuột phải và gỡ lỗi, nhưng khi bạn sử dụng gradle, có một số thiết lập tham số môi trường bổ sung thì không thể gỡ lỗi trực tiếp.
Để giải quyết vấn đề này, Eclipse đã cung cấp một tính năng bổ sung là Ứng dụng Java từ xa
bằng cách sử dụng các tính năng này, bạn có thể gỡ lỗi ứng dụng của mình.
Làm theo bước dưới đây:
chạy ứng dụng gradle của bạn bằng
./gradlew bootRun --debug-jvm
lệnh
Bây giờ vào eclipse -> nhấp chuột phải vào dự án và Gỡ lỗi cấu hình -> Ứng dụng Java từ xa.
thêm máy chủ và cổng của bạn làm localhost và cổng là 5005 (mặc định cho gỡ lỗi gradle, bạn có thể thay đổi nó)
Tham khảo để biết thêm chi tiết và bước.