2017-12-10 17 views
0

Google을 사용하여 찾을 수 없기 때문에 묻습니다.자바 디버거 인터페이스 (JDI) - 중단 점을 설정하는 방법

org.Example을 디버깅하고 싶습니다. 중단 점을 설정 한 다음 중단 점까지 실행하도록 VM을 다시 시작하려고합니다. org.Example은 단지 주요한 주요 기능입니다.

그래서 내 VM을 가지고 있지만 Location 개체를 얻을 수있는 방법을 찾지 못했습니다. 문제를 ReferenceType 개체를 얻을 수 없게 만들었습니다.

내 문제 : 내가 디버깅 프로그램을 실행해야하는 VM에 대한 "<Project_DIR>\out\artifacts\javaDebugger_jar\*"에 클래스 경로를 설정 발사 커넥터

간단한 명령 행 디버거가 있습니다. javaDebugger_jar 폴더에는 파일을 포함하는 JAR 파일이 여러 개 있습니다.

"vm.resume()"을 호출하면 프로그램이 실행됩니다. 나는 "이력서"전에 메인 클래스가로드되지 않은 것 같아요.

여기에 어떤 절차가 있습니까? 클래스가로드되었는지 확인하거나 특정 클래스에 대한 메소드 항목에 중단 점을 설정해야합니다 (어떻게 알 수 있습니까). 그런 다음 "Example"클래스의 메소드 항목에서 중단 점을 설정할 수 있습니다.

나는 그것이 바보 같기 때문에 묻습니다. 더 좋은 방법이 있습니까?

답변

0

잠시 생각한 후에이 동작이 예상됩니다.

모든 (비 jdk) 클래스가로드되기 전에 중단 점을 설정하려고합니다. 이것은 단순히 불가능합니다.

메인 메서드 and의 methd 항목을보고 중단 점을 설정해야합니다. 즉,

org.Example이로드됩니다. 이 클래스가 의존하는 모든 클래스 파일이로드됩니다.

저는이 문제가 직접적으로 의존하는 클래스에만 해당된다는 것을 알고 있습니다. 나는 이것이 Class.forName 또는 다른 것들을 통해로드되는 JDBC 드라이버에서 작동하는지 확신하지 못합니다.

이 솔루션으로 충분합니다. 이러한 클래스 (동적으로로드되는 클래스)가 어떻게 추가되는지 알고 싶다면이 질문에도 대답하십시오.

0

당신은 클래스가 준비 될 때 통지를 얻을 수있는 가상 머신의 이벤트 요구 매니저를 통해 "클래스는 요청을 준비"만들 수 있습니다

EventRequestManager erm = machine.eventRequestManager(); 
    erm.createClassPrepareRequest().enable(); 

모든 클래스가 VM에 준비 될 때 당신에게 이벤트를 제공합니다 로드되는 방법에 관계없이 원하는 경우 특정 클래스에 대해서만 알리도록 필터를 설정할 수 있습니다. 클래스가로드 될 때 중단 점을 설정하기 위해이 정책을 사용하는 경우 일시 중단 정책을 설정할 수 있습니다.