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 에이전트가 JVM TI 인터페이스를 사용하므로 최신 -agentlib : jdwp 옵션이 선호 됨) 이전 JVMDI 인터페이스가 아닌 VM)
JVM 도구 인터페이스 설명서 에서 한 가지 더 참고할 사항은 다음과 같습니다.
JVM TI는 JDK 5.0에서 도입되었습니다. JVM TI는 JDPI 6에서 더 이상 제공되지 않는 JVMPI (Java Virtual Machine Profiler Interface) 및 JVMDI (Java Virtual Machine Debug Interface)를 대체합니다.
답변
단계 :
- 위의 게시물에서 설명한 것처럼 디버깅 옵션으로 원격 Java 응용 프로그램을 시작하십시오.
- 호스트 및 포트를 지정하여 원격 디버깅을 위해 Eclipse를 구성하십시오.
- Eclipse에서 원격 디버깅을 시작하고 연결이 완료 될 때까지 기다리십시오.
- 중단 점 및 디버그 설정
- 애플리케이션 시작에서 suspend = y를 디버그하려면 Eclipse에서 연결할 때까지 원격 애플리케이션을 일시 중단 상태로 유지합니다.
자세한 내용 은 Java 원격 디버깅에 대한 단계별 안내서를 참조하십시오.
답변
Java> = 9에 대한 답변 :
Java 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
명령 은하지 않습니다 .
답변
다음은 원격 디버깅을 위해 Eclipse Debugger를 설정하는 방법입니다.
이클립스 설정 :
1. Run 버튼을 클릭하십시오
2. Debug Configurations를 선택하십시오
3.“Remote Java Application”을 선택하십시오
4. New Configuration
- 이름 : GatewayPortalProject
- 프로젝트 : GatewayPortal- 포틀릿
- 연결 유형 : 소켓 부착
- 연결 속성 : 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 클래스에서 중단 점 을 설정해야합니다 .