Eclipse로 Spring Boot 애플리케이션을 디버그하는 방법은 무엇입니까? 원격 Java 애플리케이션 디버거를

Spring Bootwebapp이 잘 실행되고 있으며 Eclipse를 통해 디버깅하고 싶습니다.

그렇다면 원격 Java 애플리케이션 디버거를 시작할 때 어떤 포트를 수신해야합니까? 내 웹앱에 디버깅을 사용하도록 설정해야하는 설정이 있습니까?



답변

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 애플리케이션 구성 을 추가하고 앱을 시작할 때 정의한 포트 / 주소를 선택하면 디버그 할 수 있습니다.


답변

더 쉬운 솔루션 :

을 입력하는 대신 mvn spring-boot:run간단히 입력하십시오.mvnDebug spring-boot:run

관련 포트에서 “원격 Java 애플리케이션”에 대한 새 디버그 구성을 작성하여 Eclipse에서 디버거를 연결해야합니다.


답변

이 작업을 수행하기 위해 원격 디버깅을 설정할 필요가 없었고 Maven을 사용했습니다.

  1. Eclipse에 Maven 플러그인이 설치되어 있는지 확인하십시오.
  2. 실행> 구성 실행> Maven 빌드> 새 시작 구성을 클릭 하십시오 .
    • 기본 디렉터리 : 프로젝트의 루트로 이동합니다.
    • 목표 : spring-boot::run.
  3. 클릭 Apply를 클릭 한 다음 실행을 .

NB. IDE에서 줄 단위 디버깅을 수행 할 때 프로젝트의 소스 코드를 찾는 데 문제가있는 경우이 SO 답변 을 살펴보고 소스 코드를 디버그 애플리케이션에 수동으로 연결하는 방법을 찾으십시오.

이것이 누군가를 돕기를 바랍니다!


답변

원격 스테이징 또는 프로덕션 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

당신이 당신의 봄 부팅 응용 프로그램을 다시 시작하면 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


답변

내 생각에 가장 좋은 해결책은 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>