답변:
main()
방법을 마우스 오른쪽 버튼으로 클릭 하고 선택 하지 않는 이유는 무엇 "Debug As... Java Application"
입니까?
있다 섹션 19.2 봄 부팅 참조에 원격 지원이 활성화 디버깅 사용하여 응용 프로그램을 시작하기에 대해 알려줍니다.
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
-jar target/myproject-0.0.1-SNAPSHOT.jar
애플리케이션을 시작한 후 실행 / 디버그 구성 에서 원격 Java 애플리케이션 구성 을 추가하고 앱을 시작할 때 정의한 포트 / 주소를 선택하면 디버그 할 수 있습니다.
java -agentlib:jdwp=help
상태에서 "이전 -Xrunjdwp 인터페이스는 계속 사용할 수 있지만 향후 릴리스에서 제거 될 예정입니다."라는 점에 유의하십시오. 대신 사용-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
더 쉬운 솔루션 :
을 입력하는 대신 mvn spring-boot:run
간단히 입력하십시오.mvnDebug spring-boot:run
관련 포트에서 "원격 Java 애플리케이션"에 대한 새 디버그 구성을 작성하여 Eclipse에서 디버거를 연결해야합니다.
이 작업을 수행하기 위해 원격 디버깅을 설정할 필요가 없었고 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
당신이 당신의 봄 부팅 응용 프로그램을 다시 시작하면 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
명령 만 그렇게한다면 멋질 것입니다.
Right click on the spring boot project -> debug as -> spring boot App
. 디버거 지점을 놓고 우편 배달부와 같은 클라이언트에서 앱을 호출합니다.
원격 디버깅을 활성화하려면 http://java.dzone.com/articles/how-debug-remote-java-applicat 을 참조하십시오 . tomcat을 사용하여 애플리케이션을 실행하는 경우 원격 디버그 매개 변수로 tomcat을 시작하거나 다음 명령을 사용하여 JPDA 지원으로 tomcat을 시작할 수 있습니다.
윈도우
<tomcat bin dir>/startup.bat jpda
*아니야
<tomcat bin dir>/startup.sh jpda
그러면 포트 8000에서 원격 디버깅이 가능합니다.
이 질문은 이미 답변되었지만 Springboot + gradle + jHipster를 디버깅하는 데에도 동일한 문제가 있습니다.
대부분 스프링 부트 애플리케이션은 마우스 오른쪽 버튼을 클릭하여 디버그 할 수 있지만 gradle을 사용하면 추가 환경 매개 변수 설정이 있으면 직접 디버그 할 수 없습니다.
이를 해결하기 위해 Eclipse는 원격 Java 애플리케이션 으로 하나의 추가 기능을 제공했습니다.
이 기능을 사용하여 애플리케이션을 디버그 할 수 있습니다.
아래 단계를 따르십시오.
./gradlew bootRun --debug-jvm
명령으로 gradle 애플리케이션
실행
이제 Eclipse로 이동-> 프로젝트 및 디버그 구성-> 원격 Java 애플리케이션을 마우스 오른쪽 버튼으로 클릭하십시오.
호스트 및 포트를 localhost로 추가하고 포트를 5005로 추가하십시오 (gradle 디버그의 기본값, 변경할 수 있음)
Spring Boot Applications 메인 클래스 파일을 마우스 오른쪽 버튼으로 클릭 -> Debug As 옵션 선택-> Java Application 선택