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
두 가지 포인트:
- 공백 없음
runjdwp
선택. - 클래스 이름 앞에 옵션이 있습니다.클래스 이름 뒤에 있는 인수는 프로그램에 대한 인수입니다!
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부터는 제공되지 않습니다.
순서:
- 위의 포스트에서 설명한 대로 디버깅 옵션을 사용하여 원격 Java 애플리케이션을 시작하십시오.
- 호스트와 포트를 지정하여 원격 디버깅을 위한 Eclipse를 구성합니다.
- Eclipse에서 원격 디버깅을 시작하고 연결이 성공할 때까지 기다립니다.
- 브레이크 포인트와 디버깅을 설정합니다.
- 응용 프로그램 시작 시부터 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.conf
VM를 사용하다# 를 삭제하고, 다음의 행의 코멘트를 해제합니다.
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
'programing' 카테고리의 다른 글
NativeScript vue, vuex 및 urlhandler (0) | 2022.07.14 |
---|---|
Vue.js에서 계산된 속성을 수정하시겠습니까? (0) | 2022.07.14 |
GCC와 클랭 파서는 정말 손으로 쓴 건가요? (0) | 2022.07.14 |
vue js에서 선택한 값 및 텍스트를 모두 가져오는 방법 (0) | 2022.07.14 |
이 Vue 계산 속성이 반응하지 않는 이유는 무엇입니까? (0) | 2022.07.14 |