실행중인 Java 프로세스에 IntelliJ IDEA 디버거 연결


237

IntelliJ IDEA 디버거를 실행중인 Java 프로세스에 연결할 수 있습니까? 그렇다면 어떻게?


3
물론이야. "원격"실행 / 디버그 구성을 작성해야합니다. 더 여기

2
음,이 명령 줄 인수는 14.0.2부터 읽기 전용입니다. 이 질문의 문제를 해결하는 데 도움이되지 않는 몇 가지만 편집 할 수 있습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
nuzzolilo

대답은 여기에 있습니다 : stackoverflow.com/questions/51207430/...
RoutesMaps.com

답변:


372

예! 설정 방법은 다음과 같습니다.

구성 실행

원격 실행 구성을 작성하십시오.

  1. 실행-> 구성 편집 ...
  2. 왼쪽 상단에서 "+"를 클릭하십시오.
  3. 가장 왼쪽 창에서 "원격"옵션을 선택하십시오
  4. 이름을 선택하십시오 (내 이름은 "원격 디버깅"입니다).
  5. "확인"을 클릭하여 저장하십시오.

여기에 이미지 설명을 입력하십시오

JVM 옵션

위의 구성은 세 가지 읽기 전용 필드를 제공합니다. 애플리케이션을 실행할 때 원격 디버깅을 위해 포트 5005를 열도록 JVM에 지시하는 옵션입니다. 디버깅중인 애플리케이션의 JVM 옵션에 적절한 항목을 추가하십시오. 이 작업을 수행하는 한 가지 방법은 다음과 같습니다.

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

그러나 응용 프로그램 실행 방법에 따라 다릅니다. 세 가지 중 어느 것이 자신에게 적용되는지 확실하지 않은 경우 첫 번째로 시작하여 작동하는 것을 찾을 때까지 목록을 내려가십시오.

IntelliJ에 연결될 때까지 응용 프로그램이 시작되도록 강제로 변경 suspend=n하도록 변경할 수 있습니다 suspend=y. 적중하려는 중단 점이 응용 프로그램 시작시 발생하는 경우에 유용합니다.

디버그

정상적으로 응용 프로그램을 시작한 다음 IntelliJ에서 새 구성을 선택하고 'Debug'를 누르십시오.

여기에 이미지 설명을 입력하십시오

IntelliJ가 JVM에 연결하고 원격 디버깅을 시작합니다.

원하는 곳에 코드에 중단 점을 추가하여 애플리케이션을 디버깅 할 수 있습니다. 응용 프로그램의 출력은 이전의 어느 위치 에나 계속 표시되지만 중단 점은 IntelliJ에서 발생합니다.


2
macos el capitan의 Intellij IDEA 15.0.2에는 "Remote"옵션이 없습니다. 그 옵션을 어떻게 얻을 수 있습니까?
user674669

잘 모르겠습니다. 어쩌면 Remote커뮤니티 에디션을 사용할 수 없습니다? 유료 버전을 사용하고 있습니다. Community Edition을 가진 사람은 누구나 확인할 수 있습니까?
Cory Klein

@CoryKlein System.out.println원격 디버깅시 IntelliJ 에서 출력을 얻는 방법을 알고 있습니까?
Don Rhummy

1
@DonRhummy 방법을 알아 내면이 답변에 해당 정보를 추가 할 수는 있지만 AFAIK IntelliJ는 현재 원격 응용 프로그램에서 stliout 및 stderr를 다시 IntelliJ로 파이핑하는 것을 지원하지 않습니다.
Cory Klein

원격 서버가 ssh를 통해서만 액세스 할 수있는 경우 키 파일을 어떻게 지정합니까?
vach

44

가능하지만 응용 프로그램을 시작할 때 일부 JVM 플래그를 추가해야합니다.

원격 디버그 구성을 추가해야합니다 (구성 편집-> 원격).

그런 다음 표시된 대화 상자 창에서 프로그램 실행에 추가 해야하는 매개 변수를 찾을 수 있습니다.

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

그런 다음 응용 프로그램이 시작되면 디버거를 연결할 수 있습니다. 디버거가 연결될 때까지 응용 프로그램을 기다리려면 suspend 플래그를 y ( suspend=y)로 변경하십시오.


아래 입력을 편집하고 위의 옵션 문자열을 업데이트하는 것이 혼란 스럽습니다 (적어도 13.1 CE).
Carl G

7
음,이 명령 줄 인수는 14.0.2부터 읽기 전용입니다. 몇 개를 편집 할 수 있습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
nuzzolilo

1
또한 해당 옵션을 설정하여 어떤 프로세스를 연결하고 있습니까?
nuzzolilo

5
첫 번째는 나를 위해 일했다. 다른 사람들에게 참고-나는 -jar 플래그 앞에 이것을 지정해야했다.
jim

2
@Nuzzolilo, idea에 표시된 명령 줄 인수는 표시 목적으로 만 사용되므로 읽기 전용입니다. 그것들은 아이디어에 추가되는 것이 아니라 디버그하려는 원격 Java 응용 프로그램에 추가되어야합니다.
Ganesh Krishnan

6

AndroidStudio 또는 아이디어

  1. 응용 프로그램이 디버그되도록 구성하고 구성 편집을 엽니 다.

"VM 옵션"구성 추가 " “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” 주소"기억

여기에 이미지 설명을 입력하십시오

  1. 구성되지 않은 경우 원격 디버거 구성, +를 클릭하여 추가

1 단계 "주소"와 동일하게 "포트"를 지정하십시오. 여기에 이미지 설명을 입력하십시오


6

또한 디버그 모드로 연결하려면 앱 JAVA_OPTS에 "-Xdebug"플래그를 추가해야합니다.


0

또한 Tomcat GUI 앱 (내 경우 : C : \ tomcat \ bin \ Tomcat9w.bin)을 사용합니다.

  • Java 탭으로 이동 하십시오.

    여기에 이미지 설명을 입력하십시오

  • Java 특성을 설정하십시오 (예 :

    자바 가상 머신

    C : \ Program Files \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    자바 가상 머신

    C : \ tomcat \ bin \ bootstrap.jar; C : \ tomcat \ bin \ tomcat-juli.jar

    자바 옵션 :

    -Dcatalina.home = C : \ tomcat

    -Dcatalina.base = C : \ tomcat

    -Djava.io.tmpdir = C : \ tomcat \ temp

    -Djava.util.logging.config.file = C : \ tomcat \ conf \ logging.properties

    -agentlib : jdwp = transport = dt_socket, 서버 = y, 일시 중지 = n, 주소 = * : 8000

    자바 9 옵션 :

    --add-opens = java.base / java.lang = ALL-UNNAMED

    --add-opens = java.base / java.io = ALL-UNNAMED

    --add-opens = java.rmi / sun.rmi.transport = ALL-UNNAMED

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