일반적으로 실행중인 jvm에 디버 커를 연결하려면 다음과 같은 인수로 jvm을 시작해야합니다.
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
이제 디버그 모드에서 시작되지 않은 프로세스를 디버깅하려면 어떻게해야합니까?
이 상황은 프로덕션 시스템 (즉, 디버그 인수없이 시작됨)이 ‘무작위'(저는 용어를 느슨하게 사용함) 버그를 나타낼 때 발생합니다. 따라서 아무도 버그를 다시 재현하는 방법을 모르기 때문에 적절한 인수로 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