2011-08-03 3 views
3

실행중인 JVM 인스턴스에서 디버깅을 활성화하는 프로그래밍 방식이 있습니까? 나는 실행중인 JVM, 디버그 서버를 만들 API를 찾고있다. API는 다음과 같은 작업을 수행합니다실행중인 JVM에서 디버깅을 활성화하는 Java API

-Xdebug -Xrunjdwp:transport=dt_socket,address=<host:port>,server=y,suspend=n. 

답변

1

이것은 불가능합니다. JVM은 처음부터 디버그 모드임을 알아야합니다. 조금 느리게 실행되지만 JVM이 이미 시작되었을 때 불가능한 디버그 정보와 중단 점을 외부 프로세스에 제공합니다.

+0

다니엘, 동의합니다. 나는 그런 API가 있기를 바랬다. 목표를 달성하기 위해 노력하고있는 대상 JVM이 아직 디버그 모드에 있지 않으며 해당 VM을 디버그 모드로 전환 할 일부 코드가 실행될 것이라고 완전히 가정합니다. VM이 청취를 시작한 정확한 포트 번호를 알고 나면 해당 정보를 잘 알려진 위치에 기록하여 디버거 사용자가 해당 디버거를 해당 VM에 연결하는 데 사용하도록합니다. –

1

Visual VM을 사용하여 실행중인 모든 JVM에 연결할 수 있습니다. 버전 1.3.2를 다운로드하고 모두 플러그인을 설치하십시오.

+0

+1 맞음! 이것은 최소한 VisualVM과 동일한 사용자 (또는 권한이 적절한 경우)에서 JVM이 시작될 때 작동해야합니다. – Daniel

0

질문자가 언급하는 디버그 포트는 Eclipse 디버거와 같이 소스 코드 디버깅을위한 것입니다. VisualVM 용 포트는 다른 JVM 옵션 세트를 사용하는 JMX 포트입니다. 그러나 예외가 있습니다. JRockit 용 Mission Control은 JMX 포트가 아닌 jdwp 포트를 사용합니다.

그렇습니다. 코드에서 동적으로 JMX 디버거를로드 할 수 있습니다. 그것의 복잡하지만 OSGI 동적으로 내가 믿을로드 할 수 있습니다. For example, here is a reference to Jetty project doing this.