programing

Java 응용 프로그램 원격 디버깅

kingscode 2022. 7. 14. 22:36
반응형

Java 응용 프로그램 원격 디버깅

Linux 머신에서 Java 어플리케이션을 실행하고 있습니다.Java 어플리케이션을 실행하는 방법은 다음과 같습니다.

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n

이 Linux 머신에서 TCP용 포트 4000을 열었습니다.Windows XP 머신에서 이클립스를 사용하여 이 어플리케이션에 접속하려고 합니다.창문에도 포트를 열었습니다.

두 컴퓨터 모두 LAN에 있지만 디버거를 Java 응용 프로그램에 연결할 수 없는 것 같습니다.내가 뭘 잘못하고 있지?

편집: 호출을 잘라 붙여넣는 사람이 있는 것을 알 수 있습니다.제가 처음에 드린 답변은 OP에만 관련된 답변이었습니다.다음은 좀 더 현대적인 호출 스타일입니다(더 일반적인 포트인 8000을 사용하는 것도 포함).

java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

원답은 다음과 같습니다.


이것을 시험해 보세요.

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

두 가지 포인트:

  1. 공백 없음runjdwp선택.
  2. 클래스 이름 앞에 옵션이 있습니다.클래스 이름 뒤에 있는 인수는 프로그램에 대한 인수입니다!

JDK 1.3 이전의 경우:

-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

JDK 1.4의 경우

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

새로운 JDK의 경우:

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

필요에 따라 포트 번호를 변경해 주세요.

자바 테크노테에서

5.0 이후 -agentlib:jdwp 옵션을 사용하여 JDWP 에이전트에 옵션을 로드하고 지정합니다.5.0 이전 릴리스에서는 -Xdebug 및 -Xrunjdwp 옵션이 사용됩니다(5.0 구현에서는 -Xdebug 및 -Xrunjdwp 옵션도 지원되지만 5.0의 JDWP 에이전트는 JDI가 아닌 VM에 대한 JDWP TI 인터페이스를 사용하기 때문에 새로운 -agentlib:jdwp 옵션이 더 좋습니다).

JVM Tool 인터페이스 매뉴얼에서 한 가지 더 주의할 사항이 있습니다.

JVM TI는 JDK 5.0에서 도입되었습니다.JVM TI는 Java Virtual Machine Profiler Interface(JVMPI)와 Java Virtual Machine Debug Interface(JVMDI)를 대체하며, JDK 6부터는 제공되지 않습니다.

순서:

  1. 위의 포스트에서 설명한 대로 디버깅 옵션을 사용하여 원격 Java 애플리케이션을 시작하십시오.
  2. 호스트와 포트를 지정하여 원격 디버깅을 위한 Eclipse를 구성합니다.
  3. Eclipse에서 원격 디버깅을 시작하고 연결이 성공할 때까지 기다립니다.
  4. 브레이크 포인트와 디버깅을 설정합니다.
  5. 응용 프로그램 시작 시부터 suspend=y를 사용하여 디버깅할 경우 원격 응용 프로그램은 연결되기 전까지 일시 중단된 상태로 유지됩니다.

자세한 내용은 Java 원격 디버깅에 대한 단계별 가이드를 참조하십시오.

Java > = 9에 대한 답변:

9을 약간 9+의 JVM만을 붙입니다. 「JVM」은 IP 주소*:

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

이는 https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435에 기재되어 있는 변경에 의한 것입니다.

Java < 9 의 경우는, 포토 번호만으로 접속할 수 있습니다.

는 논쟁의 순서가 중요하다는 것을 강조하고 싶다.

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar명령을 실행하면 디버거 포트가 열립니다.

java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000명령어는 그렇지 않습니다.명령줄 인수로 app.jar 뒤에 모든 것을 전달합니다.

원격 디버깅을 위해 Eclipse Debugger를 다음과 같이 설정해야 합니다.

이클립스 설정:

. 을 지정하여 실행]합니다. [파일명을 지정하여 실행]버튼을 클릭합니다.
. [ Debug ]를합니다. 디버깅 설정 선택
" Java 합니다.3 . 리모트 Java 어플리케이션
4. 새로운 구성

  • 이름 : Gateway Portal Project
  • 프로젝트: Gateway Portal-portlet
  • 연결 유형: 소켓 연결
  • 연결 속성: i) localhost ii) 8787

JBoss의 경우:

. 1. 을 합니다./path/toJboss/jboss-eap-6.1/bin/standalone.confVM를 사용하다# 를 삭제하고, 다음의 행의 코멘트를 해제합니다.

JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

Tomcat의 경우:

catalina.bat 파일:

순서 1:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

순서 2:

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

3단계: 다음과 같이 명령 프롬프트에서 Tomcat을 실행합니다.

catalina.sh jpda start

그런 다음 디버깅할 Java 클래스에서 중단점을 설정해야 합니다.

어떤 머신에서 다른 머신으로의 리모트디버깅을 실제로 실행할 경우 를 사용하는 문제가 있는 모든 사용자용입니다.

- agentlib : jdwp = dt_param, server = y, address = 8000, param=n

가 로컬 호스트에 바인드(적어도 Unix/osx 머신에서는)되기 때문에 로컬호스트에서만 접속할 수 있기 때문에 충분하지 않습니다.

리모트 디버깅을 시도하면 접속이 거부됩니다.Java 9부터 다음 작업을 수행해야 합니다.

- agentlib : jdwp = dt_param, server = y, address = *:8000, param=n

또는 hat에 대해 바인드해야 하는 IP를 지정합니다.*

언급URL : https://stackoverflow.com/questions/975271/remote-debugging-a-java-application

반응형