programing

IntelliJ IDEA 커뮤니티 에디션을 사용하여 스프링 부트 애플리케이션을 디버깅하는 방법

projobs 2022. 9. 29. 22:11
반응형

IntelliJ IDEA 커뮤니티 에디션을 사용하여 스프링 부트 애플리케이션을 디버깅하는 방법

IntelliJ IDEA 커뮤니티 에디션에서 Java spring-boot 어플리케이션을 디버깅하는 데 어려움이 있습니다.가장 큰 문제는 IDE가 중단점에서 정지하지 않고 프로그램도 중단점을 통해 실행된다는 것입니다.IntelliJ IDEA를 중단점에 멈추려면 어떻게 해야 합니까?

추가 정보로서 실행 구성을 다음에 실행 구성을 나타냅니다.

spring-boot:run 명령어를 사용하여 Maven 설정을 수행합니다.나는 시작 전에 프로젝트를 구축한다.

tldr: 명령줄을 다음과 같이 조정할 수 있습니다.

spring-boot:run -Dspring-boot.run.fork=false

설명:

되어 자동으로인 IntelliJ Java를 추가).-agentlib:jdwpetc,합니다).

이러한 Java 프로세스는 동일한 파라미터를 취득하지 않고 별도의 프로세스에 있기 때문에 디버거에 연결되어 있지 않은 새로운 인스턴스를 포크하는 경우가 많습니다.이것은 혼란스러울 수 있습니다.

spring-boot:runMaven의 목표는 새로운 JVM을 포킹하는 것 외에도 더 많은 혼란을 야기합니다. 왜냐하면 새로운 JVM이 어떤 옵션을 얻느냐에 따라 포킹이 이루어질 수도 있고 아닐 수도 있기 때문입니다.이 중 일부는 문서에서 확인할 수 있지만 항상 명확한 것은 아닙니다.

먼저 Java 프로세스가 실제로 디버깅되고 있는지 여부를 확인해야 합니다.IntelliJ에서 응용 프로그램을 시작하면 실행/디버깅 탭에서 메시지가 스크롤됩니다.맨 위에는 실행 중인 명령줄이 있습니다.Debugger 파라미터)가되어 있어야 합니다.-agentlib:jdwpetc " VM메시지가 은, 것을 입니다.etc) 「Connected to Target VM」(VM에 접속입니다.이것은, 접속을 확인하는 디버거입니다.

다음으로수를 들어 및 *에서 "Da" "JVM" "Mac" (Mac) 을 사용할 수 .ps aux | grep javaJava 프로세스에는 일반적으로 거대한 파라미터 리스트가 있으며 대부분은 클래스 패스입니다.실제 실행 중인 응용 프로그램은 명령줄 맨 끝에 있습니다.JVM이 분기된 경우 Maven 목표를 실행하는 프로세스와 Spring 애플리케이션을 실행하는 프로세스가 있습니다.그러면 관심 없는 프로세스에 디버거가 연결되고 중단점이 작동하지 않습니다.

spring-boot:run에서는 '포킹'을 할 수 .fork를 참조해 주세요.

유일한 방법은 Intelij Idea에서 직접 응용 프로그램을 실행하거나 디버깅하는 것입니다.다음을 포함하는 클래스를 엽니다.

 public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

마우스 오른쪽 버튼을 클릭합니다.-> 어플리케이션 디버깅

다음 단계를 수행할 수 있습니다.

  1. 메뉴 [파일명을 지정하여 실행]-> [설정 편집...]를 선택합니다.
  2. 새 원격 구성을 만듭니다.기본적으로 설정을 변경할 필요가 없습니다.
    - agentlib : jdwp = dt_param, server = y, server = n, address = 5005그러나 예를 들어 연결하기 전에 JVM을 일시 중단하려면 suspend=y를 변경할 수 있습니다.또는 포트 등을 변경할 수 있습니다.
  3. JVM 버전에 따라 명령줄을 복사하고 구성을 저장합니다.
  4. 터미널 창에서 mvn clean spring-boot: run -Dspring-boot.run.jvmArguments="agentlib:jdwp=dt_socket,server=y,suspend=n,address=5005"를 사용하여 앱을 실행합니다.
  5. 2단계에서 작성한 Remote Configuration을 실행하여 앱에 연결합니다.이제 앱을 디버깅할 수 있습니다.

빌드에 Spring Dev Tools를 포함하면 인텔리J 디버깅이 중단됩니다(위의 설명에 따라).이 기능을 사용하지 않는 경우 빌드에서 제거하기만 하면 됩니다.

Maven을 사용하는 경우 다음 행을 pom.xml에서 삭제해야 합니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

다른 리모트 디버깅 설정을 작성하는 것만으로 동작했습니다.

edit configurations -> Remote -> +로 이동합니다.그리고 인텔리J를 통해 정상적으로 어플리케이션을 기동합니다.그런 다음 새로 생성된 원격 구성으로 전환합니다.실행하는 대신 debug 키를 누릅니다.이제 디버거가 준비되어야 하며 중단점을 설정하면 디버거가 중단됩니다.

EDIT: 디버깅포트는 이미 유효하게 되어 있습니다만, 이것은 모든 사람에게 해당되지 않는 것을 알 수 있습니다.다음과 같은 오류가 발생할 경우

'Unable to open debugger port (localhost:5005): java.net.ConnectException "Connection refused: connect"

그런 다음 앱의 pom.xml에서 포트를 활성화해야 합니다.@Gianluca Musa 답변에서 복사:

<plugin>
<groupId>org.springframework.boot</groupId>
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
</configuration>
</plugin>

이 점을 지적한 @Jianluca Musa에 대한 칭찬

piphonom의 anwser는 좋지만 조금 더 해야 합니다.이렇게 maven 플러그인에 jvmArguments를 추가합니다.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
        </jvmArguments>
    </configuration>
</plugin>

스프링 부트 프로젝트의 리모트 디버깅에 대한 자세한 내용은 다음을 참조하십시오.

  1. 앱의 POM에서 디버깅 포트를 활성화합니다.XML 종류:

    <blocks><groupId>org.springframework.부트 </groupId><설정><jvmArguments>- Xdebug - Xrunjdwp : transport = dt _ socket , server = y , suspend = y , address = 5005</jvmArguments></설정></filters>

  1. 빌 미에코자의 암시를 따르다.

    edit configurations -> Remote -> +로 이동합니다.그리고 인텔리J를 통해 정상적으로 어플리케이션을 기동합니다.그런 다음 새로 생성된 원격 구성으로 전환합니다.실행하는 대신 debug 키를 누릅니다.이제 디버거가 준비되어야 하며 중단점을 설정하면 디버거가 중단됩니다.

불행하게도, 모든 선입견의 답변은 불완전하다.IntelliJ에서 올바른 리모트 디버깅 방법을 찾기 위해 많은 시간을 소비했습니다.자세한 설명은 다음과 같습니다.

프로젝트 코드가 로컬머신(Windows OS)에 있고, 서버(또는 VMWare 워크스테이션)의 Ubuntu VM에 프로젝트를 도입하고 있는 것을 전제로 하고 있습니다.이 2대의 머신은 같은 네트워크상에 있습니다(서로 ping 할 수 있습니다).

먼저 [Run] > [ Edit Configuration ]메뉴를 사용하여 새로운 [Run/Debug]설정을 추가하고 왼쪽 상단에 있는+ 버튼을 눌러 [Remote]옵션을 선택합니다.설정 파라미터는 그대로 유지하고 새로운 Configuration의 이름만 정의합니다.

다음으로 퍼티를 열고 SSH를 통해 리모트서버에 접속합니다.다음 명령을 실행하여 퍼티 터미널의 프로젝트에 리모트디버깅 기능을 추가합니다.

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

리모트 서버(같은 putty 세션 내)의 프로젝트의 루트 디렉토리로 변경하고, 통상 사용하는 커맨드를 사용해 실행합니다(예를 들면, 다음과 같습니다).

mvn -U clean spring-boot:run

여기서 모두가 간과했던 가장 중요한 부분을 소개합니다.

퍼티 세션 창의 상단을 마우스 오른쪽 버튼으로 클릭하고 "설정 변경.." 옵션을 선택합니다.경로 Connection으로 이동합니다.>왼쪽 옵션트리의 터널다음으로 다음 그림과 같은2개의 포트 전송 레코드를 추가합니다(하나는 같은 포트 번호로 로컬호스트 5005 포트를 리모트서버 IP 에 전송 하고, 다른 하나는 리모트 5005 포트를 로컬호스트 머신의 5005 포트에 전송 합니다).

enter image description here

마지막으로 IntelliJ로 돌아가서 [파일명을 지정하여 실행]메뉴에서 이전에 추가한 설정을 선택하고 [디버깅]버튼을 누릅니다.로컬 IntelliJ IDEA가 프로젝트의 리모트 전개에 접속되어 디버깅할 준비가 되어 있어야 합니다.

enter image description here

Spring Boot Maven 플러그인(> 2.2.0)은 애플리케이션 프로세스를 포크합니다.따라서 디버깅 모드에서 시작된 오래된 정상적인 "spring-boot:run"은 중단점에서 정지하지 않습니다.

넌 두가지 옵션이 있다 :

1. 메인 클래스를 직접 실행합니다. 「어플리케이션 설정」을 참조해 주세요.

2. 리모트 디버깅

2.1. spring-boot-maven-plugin을 설정하여 원격 디버깅을 활성화합니다.

<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=5005
                </jvmArguments>
            </configuration>
        </plugin>
     </plugins>
</build>

2.2. 서버 실행 메이븐 구성 참조

2.3. debug-server 실행 리모트 JVM 디버깅 구성 참조

inteliJ goto run -> edit configuration -> 를 누릅니다.-> <어플리케이션> 을 선택합니다.

필드 입력: 메인클래스, 워킹디렉토리, 모듈의 클래스 패스

IntelliJ Community Edition에서는 다음 회피책을 사용하여 mvn spring-boot:run을 통해 표준 모듈을 사용하여 Java 응용 프로그램을 디버깅할 수 있습니다.인텔리J 설정에서 전용 디버깅청취자를 작성할 필요가 없습니다(즉시 작성됩니다).

메이븐 메뉴(화면 우측의 디폴트)에서 "메이븐 목표 실행" 버튼을 클릭합니다.

click the button the arrow points to

이 .mvn spring-boot:run -Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000"의 조정을 할 수 ('J'는 'J'는 'J'로 되어 있습니다.

스프링 부트 애플리케이션이 시작되지만 일시 중단됩니다.서서 run에는 단추가 Attach debugger.

click the button the arrow points to, at the bottom of the image

클릭하면 스프링 부트 어플리케이션이 실행되고 중단점이 나타납니다.

NB: @stinger가 제공하는 솔루션은 IntelliJ Idea Ultimate Edition에서만 작동하며, IntelliJ Community Edition에서는 작동하지 않습니다.이것은 질문의 질문입니다만, 저는 아직 그의 답변에 코멘트를 추가할 만한 충분한 평판을 가지고 있지 않습니다.Ultimate Edition을 사용하는 경우 그의 솔루션이 선호됩니다.

언급URL : https://stackoverflow.com/questions/44096708/how-to-debug-spring-boot-application-with-intellij-idea-community-edition

반응형