원격 디버깅 Java 응용 프로그램
-
13-09-2019 - |
문제
Linux 시스템에서 실행되는 Java 응용 프로그램이 있습니다. 다음을 사용하여 Java 응용 프로그램을 실행합니다.
java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n
이 Linux 시스템에서 TCP 용 Port 4000을 열었습니다. Windows XP 시스템에서 Eclipse를 사용 하고이 응용 프로그램에 연결하려고합니다. 나는 또한 창에서 포트를 열었다.
두 기계 모두 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 옵션도 지원하지만 새로운 -agentlib : jdwp 옵션은 JVM TI 인터페이스를 사용하기 때문에 선호됩니다. 구형 JVMDI 인터페이스가 아닌 VM)
주목해야 할 것 중 하나가 더 있습니다 JVM 도구 인터페이스 문서:
JVM TI는 JDK 5.0에 도입되었습니다. JVM Ti는 JVMPI (Java Virtual Machine Profiler Interface)와 JDK 6 기준으로 더 이상 제공되지 않는 JVMDI (Java Virtual Machine Debug Interface)를 대체합니다.
단계 :
- 위의 게시물에있는대로 디버깅 옵션으로 원격 Java 응용 프로그램을 시작하십시오.
- 호스트 및 포트를 지정하여 원격 디버깅을위한 Eclipse를 구성하십시오.
- Eclipse에서 원격 디버깅을 시작하고 연결이 성공할 때까지 기다리십시오.
- 설정 중단 점 및 디버그.
- 응용 프로그램 시작에서 디버깅을하려면 SPENTEND = 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의 경우 포트 번호는 연결하기에 충분합니다.
원격 디버깅을 위해 Eclipse Debugger를 설정하는 방법입니다.
일식 설정 :
1. 실행 버튼을 클릭하십시오
2. 디버그 구성을 선택하십시오
3.“원격 Java 응용 프로그램”을 선택하십시오.
4. 신원 구성
- 이름 : GatewayPortalProject
- 프로젝트 : Gatewayportal-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 클래스에서는 디버그를 원합니다.
나는 그것을 강조하고 싶습니다 논쟁의 순서가 중요합니다.
나를 위한 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
명령 그렇지 않습니다.
디버깅의 가장 좋은 옵션은 로그를 작성하고 로그를 분석하는 것입니다. 그러나 경우에 따라 서버에 배포 된 웹 응용 프로그램을 디버그해야합니다.
보다 Java 웹 응용 프로그램을 원격으로 디버깅합니다 링크. 원격 디버깅의 완전한 흐름이 여기에 설명되어 있습니다. 도움이되기를 바랍니다.