2012-01-15 3 views
6

잠재적으로 JDI API를 찾고 실행 중 임의의 지점에서 JVM을 일시 중지하려고합니다. BreakPointRequest에서 createBreakpointRequest 메소드는 특정 위치가 필요합니다. 중단 점을 만들기 위해 전달 될 수있는 현재 위치를 얻기 위해 위치가 필요하지 않은 다른 API가 있습니까?JDI : 디버거에서와 같이 Java 응용 프로그램 (JVM)을 일시 중지하는 방법

기본적으로 응용 프로그램을 연결하고 일시 중지 한 다음 JVMTI 에이전트를 사용하여 BreakPoint 이벤트 콜백을 수신하여 추가 처리를 수행 할 방법을 찾고 있습니다. 감사합니다

+0

JVM 또는 응용 프로그램을 중단 하시겠습니까? 내가 올바르게 이해한다면, 하나의 jvm이 여러 응용 프로그램을 호스팅 할 수 있습니다. 그것이 JVM, Virtualmachine 클래스 인 경우 프로세스 메소드가 req에 대해 조사 할 가치가 있습니다. – kosa

답변

3

중단 점에 대해 URL을 확인하시기 바랍니다. 응용 프로그램을 임의로 일시 중지하는 것은 현재 JVM에서 현재 실행중인 모든 스레드를 일시 중단하여 수행하는 것이 가장 좋습니다. SuspendThreadList() 또는 SuspendThreadjvmti에서 확인하십시오. 이 메커니즘은 당신이 찾고있는 '일시 정지'입니다.

1

JDI를 사용하여 실행중인 jvm을 임의로 일시 중지하려는 경우 JDI VirtualMachine 인터페이스의 suspend 메소드를 사용합니다.

그러나 이것은 실제로 jvmti 에이전트에 연결할 수 있다는 점에서별로 도움이되지 않습니다. 다른 답변에서 지적한 것처럼, jvmti는 같은 일을하는 자체 메서드를 가지고 있습니다.

특정 에이전트를 호출하는 것과 달리 중단 점에 임의의 콜백을 정의 할 방법을 찾고 있다면 jdiscript에 관심이있을 수 있습니다. 이는 JDI 주변의 스크립팅 레이어로, C++을 사용하지 않고 곧바로 Java로 쉽게 처리 할 수 ​​있습니다.