sourcecode

JVM을 원격으로 디버깅할 수 있도록 설정하는 Java 명령줄 옵션은 무엇입니까?

copyscript 2022. 8. 21. 19:51
반응형

JVM을 원격으로 디버깅할 수 있도록 설정하는 Java 명령줄 옵션은 무엇입니까?

나도 알아JAVA_OPTSJava 프로그램을 원격으로 디버깅하도록 설정합니다.

그것들은 무엇이고 무엇을 의미합니까?

Java 5.0 이전 버전에서는-Xdebug그리고.-Xrunjdwp논쟁들.이러한 옵션은 이후 버전에서도 계속 작동하지만 속도가 느린 JIT 대신 인터프리터 모드로 실행됩니다.

Java 5.0부터는-agentlib:jdwp단일 옵션:

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

옵션-Xrunjdwp또는agentlib:jdwp인수는 다음과 같습니다.

  • transport=dt_socket: JVM에 접속하는 방법을 의미합니다(소켓은 좋은 선택입니다.멀리 있는 컴퓨터를 디버깅하는 데 사용할 수 있습니다).
  • address=8000: TCP/IP 포트가 노출되어 디버거에서 연결하기 위해
  • suspend=y: 'y'의 경우 디버거가 연결될 때까지 기다렸다가 실행을 시작하도록 JVM에 지시합니다.그렇지 않으면 ('n'의 경우) 바로 실행을 시작합니다.

Java 5 이하의 셋업에 관한 기사를 북마크 하고 있습니다.

기본적으로 다음을 사용하여 실행:

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

Java 5 이상의 경우 다음을 사용하여 실행합니다.

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

Java 9.0 JDWP는 기본적으로 로컬 연결만 지원합니다.http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435

리모트 디버깅의 경우는, 다음과 같이 프로그램을 실행할 필요가 있습니다.*:주소:

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

Java 1.5 이상의 경우:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Java 1.4의 경우:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Java 1.3의 경우:

java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

다음은 간단한 프로그램의 출력입니다.

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled
Listening for transport dt_socket at address: 1044
Hello whirled

자바

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=y -jar target/cxf-boot-simple-0.0.1-SNAPSHOT.jar

address디버깅을 허용하는 포트를 지정합니다.

메이븐

**Maven을 사용한 Spring Boot 앱 디버깅:

mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"

명령줄

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

그라들

gradle bootrun --debug-jvm

메이븐

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER

여기 가장 쉬운 해결책이 있습니다.

Maven을 사용하는 경우 많은 환경 특수 구성이 필요합니다.그러니, 만약 당신이 메이븐에서 프로그램을 시작한다면,mvnDebug대신 지휘하다mvn원격 디버깅을 구성한 상태에서 앱을 시작합니다.이제 디버거를 포트 8000에 연결할 수 있습니다.

모든 환경 문제를 해결해 줄 것입니다.

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

여기서는 소켓 연결 커넥터를 사용합니다.이 커넥터는 dt_socket 전송이 구성되어 VM이 서버 디버깅모드로 동작하고 있을 때 디폴트로 유효하게 됩니다.

상세한 것에 대하여는, https://stackify.com/java-remote-debugging/ 를 참조해 주세요.

Java 9 이후를 사용하는 경우 리모트로 디버깅하려면 (로컬에서 도커를 사용하는 경우에도 마찬가지)--debug *:($port)왜냐하면 자바9부터--debug ($port)는 리모트가 아닌 로컬에서만 디버깅을 허용합니다.

그래서 '처럼 '도커 컴포넌트'에서 할 수 .command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787

언급URL : https://stackoverflow.com/questions/138511/what-are-java-command-line-options-to-set-to-allow-jvm-to-be-remotely-debugged

반응형