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


100

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

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


Linux Mint 18 Sarah의 STS 3.9.4.RELEASE에서 Spring Boot 애플리케이션을 디버그하려면 디버그 관점으로 이동해야합니다.
TimeTrap

답변:


167

main()방법을 마우스 오른쪽 버튼으로 클릭 하고 선택 하지 않는 이유는 무엇 "Debug As... Java Application"입니까?


그런 생각은 못했어요. 나머지 앱을 테스트하고 있습니다. 그것을 시작한 다음 다른 구성으로 내 브라우저로 치십시오.
JeffLL

8
서버에서 원격으로 실행되는 애플리케이션을 디버깅해야 할 때가 있는데,이 경우에는 적용되지 않습니다.
Cuga

그것은 나를 위해 작동하지 않았습니다. "에디터는 주요 유형이 포함되어 있지 않습니다"
라즈

"main () 메서드를 마우스 오른쪽 버튼으로 클릭"하지 않은 것 같습니다.
데이브 Syer

4
내 상황은 다르지만 Main을 직접 실행하면 몇 가지 스프링 구성 파일, 즉 bootstrap.xml을 선택하지 않았으므로 maven spring-boot : run으로 실행하도록 전환해야했습니다. 그러나 문제는 이클립스 에서이 maven 목표를 실행하더라도 디버그하지 않는다는 것입니다.
sanjay patel

91

있다 섹션 19.2 봄 부팅 참조에 원격 지원이 활성화 디버깅 사용하여 응용 프로그램을 시작하기에 대해 알려줍니다.

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

애플리케이션을 시작한 후 실행 / 디버그 구성 에서 원격 Java 애플리케이션 구성 을 추가하고 앱을 시작할 때 정의한 포트 / 주소를 선택하면 디버그 할 수 있습니다.


이것은 나를 위해 일했습니다. 감사! Eclipse는 내 스프링 부트 프로젝트를 디버깅 할 수 없습니다 (Main 클래스를 찾을 수 없다고 불평했습니다).
user6123723

4
Java 8 (다른 버전에 대해서는 모르겠 음) 실행 java -agentlib:jdwp=help상태에서 "이전 -Xrunjdwp 인터페이스는 계속 사용할 수 있지만 향후 릴리스에서 제거 될 예정입니다."라는 점에 유의하십시오. 대신 사용-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Paul

23

더 쉬운 솔루션 :

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

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


3
그러면 기본 포트 번호가 아닌 다른 포트 번호를 어떻게 지정합니까?
Stephane

19

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

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

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

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


spring-boot : run으로 서버를 실행하면 콘솔 창에서 빨간색 아이콘을 누르는 것만으로는 서버를 중지 할 수 없습니다.
Shailesh Pratapwar

그렇게 멈출 수 있습니다 (netstat를 설치해야 할 수도 있습니다. 바이너리를 만들 었는지 아니면 Cygwin과 함께 제공된 것인지 잊어 버렸습니다. 또는 현재 Windows의 일부) : netstat -ano | grep "9999"-Windows taskkill / F / PID 36308에서 36308 작업 ID 반환
armyofda12mnkeys

19

원격 스테이징 또는 프로덕션 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 및 해당 스레드가 표시되어야합니다. 중단 점은 원격으로 트리거되는 즉시 실행되어야합니다.


포트 포워딩과 터널링은 제가 놓친 부분이었습니다. 고마워. Amazon에서 인터넷 기반 서버로 디버깅하는 경우 중요합니다.
PaulNUK

14

아래 명령을 실행하십시오 pom.xml.

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

포트에서 디버깅 옵션을 사용 하여 원격 Java 응용 프로그램 을 시작하십시오.5005


2
디버거가에 연결될 때까지 기다리지 못합니다 Spring Boot 2.0.3.RELEASE.
Stephane

10

내 생각에 가장 좋은 해결책은 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명령 만 그렇게한다면 멋질 것입니다.
Stephane

1
@Stephane,이 구성은 아마 쉽게 가능하도록 특정 프로필에 있어야합니다
davidxxx

4
  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "Debug As => Java application or Spring boot App"을 선택합니다. -capture1- 여기에 이미지 설명 입력
  • 앱의 어딘가에서 애플리케이션이 일시 중지되도록하려면 왼쪽을 두 번 클릭하면이 캡처 2와 같습니다. 여기에 이미지 설명 입력
  • 그런 다음 앱을 시작할 때 화살표를 사용하여 다음으로 이동합니다. (캡처 3) 여기에 이미지 설명 입력

이것은 제목 질문에 대한 좋은 대답입니다. 그러나 설명에는 더 구체적이고 다른 질문이 있으므로 다른 답변이 필요합니다.
Thor Hovden

그래서 나는 MyEclispe를 사용했고 Debug As-> Spring Boot App 옵션을 사용할 수 있었고 잘 작동했습니다. Eclipse Oxygen을 사용하고 있지 않으며 Spring Boot App 메뉴 항목을 더 이상 사용할 수 없습니다. 이것을 얻으려면 Eclipse 용 플러그인을 설치해야합니까?
Kachopsticks

3

Right click on the spring boot project -> debug as -> spring boot App. 디버거 지점을 놓고 우편 배달부와 같은 클라이언트에서 앱을 호출합니다.


2

원격 디버깅을 활성화하려면 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에서 원격 디버깅이 가능합니다.


2

Eclipse 또는 다른 IDE를 사용하여 메인 스프링 부트 애플리케이션을 마우스 오른쪽 버튼으로 클릭하고 "debug as java application"을 클릭하십시오.


2

이 질문은 이미 답변되었지만 Springboot + gradle + jHipster를 디버깅하는 데에도 동일한 문제가 있습니다.

대부분 스프링 부트 애플리케이션은 마우스 오른쪽 버튼을 클릭하여 디버그 할 수 있지만 gradle을 사용하면 추가 환경 매개 변수 설정이 있으면 직접 디버그 할 수 없습니다.

이를 해결하기 위해 Eclipse는 원격 Java 애플리케이션 으로 하나의 추가 기능을 제공했습니다.

이 기능을 사용하여 애플리케이션을 디버그 할 수 있습니다.

아래 단계를 따르십시오.

./gradlew bootRun --debug-jvm명령으로 gradle 애플리케이션 실행

이제 Eclipse로 이동-> 프로젝트 및 디버그 구성-> 원격 Java 애플리케이션을 마우스 오른쪽 버튼으로 클릭하십시오.

호스트 및 포트를 localhost로 추가하고 포트를 5005로 추가하십시오 (gradle 디버그의 기본값, 변경할 수 있음)

자세한 내용과 단계는 참조하십시오 .


0

Spring Boot Applications 메인 클래스 파일을 마우스 오른쪽 버튼으로 클릭 -> Debug As 옵션 선택-> Java Application 선택

여기에 이미지 설명 입력 이제 중단 점을 사용하여 애플리케이션을 디버그 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.