debug 인수를 사용하여 JVM을 시작하지 않고 Java 응용 프로그램을 디버깅합니다.
일반적으로 실행 중인 jvm에 디버거를 연결하려면 다음과 같은 인수를 사용하여 jvm을 시작해야 합니다.
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
디버깅 모드에서 시작되지 않은 프로세스를 디버깅하려면 어떻게 해야 합니까?
이 상황은 프로덕션 시스템(즉, debug args 없이 시작됨)에서 '랜덤'(약하게 사용) 버그가 발생할 때 발생합니다.따라서 적절한 인수를 사용하여 jvm을 재시작할 수 없습니다. 아무도 버그를 재현하는 방법을 모르기 때문입니다.이 상황에서는 JVM에 접속할 수 없습니까?
jdb와 같은 툴을 사용하여 이미 실행 중인 JVM에 접속하는 것은 디버깅모드로 시작하지 않는 한 불가능합니다.
JVM man 페이지에서
jdb를 사용하는 또 다른 방법은 이미 실행 중인 Java VM에 연결하는 것입니다.jdb로 디버깅할 VM은 다음 옵션을 사용하여 시작해야 합니다.
jsadebugd(JDK)를 사용하여 디버깅서버를 프로세스에 접속할 수 있습니다(Windows용 디버깅툴을 사용하여 Windows에서 사용 가능).실험으로 표시되므로 먼저 테스트 기계에서 시험해 보는 것이 좋습니다.
사용방법:
jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost
arg의 커넥터 이름은 다음 항목을 사용하여 확인할 수 있습니다.jdb -listconnectors
.
jdb 등의 툴을 사용하여 이미 실행 중인 JVM에 접속하는 것은 디버깅모드로 기동하지 않는 한 불가능합니다.
소련 러시아 소식통에 따르면
jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426
Visual VM은 디버거는 아니지만 몇 가지 문제를 진단하는 데 유용한 스레드 덤프 및 힙 덤프를 가져올 수 있습니다.가장 유용한 기능을 사용하려면 JVM 5 또는 6이 필요합니다.
jstack(데드록이 있는 경우 유용) 또는 btrace VisualVM 플러그인을 사용하여 문제를 해결할 수도 있습니다.
항상 jdb와 디버깅을 수동으로 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/376201/debug-a-java-application-without-starting-the-jvm-with-debug-arguments
'programing' 카테고리의 다른 글
자바에서 프로그래밍 방식으로 인터페이스의 모든 구현 목록을 가져오려면 어떻게 해야 합니까? (0) | 2022.09.30 |
---|---|
[Vue warn] :렌더 함수 오류: "TypeError: null의 속성 'first_name'을 읽을 수 없습니다." (0) | 2022.09.30 |
PHP MYSQLI_ASYNC 쿼리 삽입 후 계속 진행 (0) | 2022.09.30 |
dict(또는 다른 Python 객체)를 저장하려면 어떻게 피클을 사용해야 합니까? (0) | 2022.09.30 |
Java 클래스 파일 작성은 결정적입니까? (0) | 2022.09.30 |