2012-07-03 6 views
1

현재 IDebugContextListener 클래스 (Eclipse 개발자 도구 API/라이브러리의 일부)를 구현하여 디버거에서 이벤트 변경 사항을 수신합니다. 이런 일이 만드는 방법은 다음과 같습니다 IVariable 객체 표현에서 실제 객체 가져 오기

private void contextActivated(ISelection context) { 
     if (context instanceof StructuredSelection) { 
       Object data = ((StructuredSelection) context).getFirstElement(); 
       if (data instanceof IStackFrame) { 
         reciever.setStackFrame((IStackFrame) data); 
       } else { 
         reciever.setStackFrame(null); 
       } 
     } 
} 

는 기본적으로 디버거가 디버깅중인 프로그램에서 무슨 일이 일어나고 있는지의 모델을 제공 내부 IVariables이 내 프로그램 IStackFrame의를,주고있다. 디버깅중인 프로그램에서 실행중인 참 변수의 데이터 표현입니다. IVariables는 그들이 나타내는 변수의 이름을 얻고 타입을 얻는 것과 같은 기본적인 것들을 할 수 있기 때문에 기능면에서 제한적입니다.

이것은 가능하지 않을 수도 있지만 사본을 얻을 수있는 방법이 있습니까? IDebugContextListener 클래스를 사용하는 IVariable 데이터 표현이 아니라 실제 객체를 나타냅니다.

내 목적은 개체의 내부 기능을 사용하고 싶습니다. IVariables를 사용하면 객체 내부의 변수 속성에만 액세스 할 수 있습니다.

답변

1

IDebugContextListener는 실제로 IJavaVariable 인터페이스를 구현하는 IVariables 컬렉션이있는 IStackFrame을 반환합니다. 이것을 알면 IJavaVariable에서 IJavaValue를 가져올 수 있으며, IJavaVariable은 다시 IJavaObject로 캐스팅 될 수 있습니다.

IJavaObject는 디버거 JVM과 통신하여 스택의 메소드를 실행하고 메소드의 반환 값의 IValue를 반환 할 수있는 sendMessage()라는 메소드를 제공합니다.

이렇게하면이 문제를 해결할 수 있습니다.

2

IVariable/IValue 인터페이스는 디버그 정보를 가져 오는 일반적인 언어 독립적 방법을 제공합니다. 즉,이 값을 사용하여 디버거에서 직접 현재 값을 직접 가져올 수는 없습니다.

그러나 JDT와 같은 언어 환경은 정보를 얻는 데 도움이되는 두 번째 언어 별 레이어를 제공합니다 (JDT의 경우 org.eclipse.jdt.debug project 참조).

Java 디버거 값을 가져 오는 자세한 예제는 source code of the Inspect action을 참조하십시오. 기본적으로이 코드는 디버깅 된 JVM과 통신하는 방법을 보여줍니다.

경고 : 여기 제시된 해결책은 JDT의 내부 코드 (JDT 플러그인 외부에서 사용 가능할 수도 있음)에 의존 할 수 있습니다. 다른 JVM과 통신하는 것은 매우 느릴 수 있습니다. 조심해.

+0

답장을 보내 주셔서 감사합니다. 내 다른 질문에 게시 한 사람이라고 생각합니다. 사실 Eclipse 디버깅 비주얼 라이저 소스 코드를 면밀히 검사하여 디버깅 도구를 빌드하기 시작했습니다 (따라서 IVariable 인터페이스 사용). 검사 작업이 JVM과 통신하는 방법을 설명하거나 간략하게 설명 할 수 있습니까? 나는 코드의 어느 부분이 그렇게하고 있는지 확신하지 못한다. 표현식보기를 제어하는 ​​것처럼 보입니다. 하루가 끝나면 기본적으로 시각화 프로그램이 디버거를 사용하여 수행중인 작업을 수행하려고합니다. 실제 값/개체를 가져 오는 것 외에는 예외입니다. 감사! – KWJ2104

+0

98-99 행은 JVM과의 통신과 관련이 있다고 생각합니다. 죄송합니다. 자세한 내용은 모르겠습니다. 얼마 전에 필자의 시각화 플러그인에 대한 구체적인 논리 구조를 제공하는 것에 대한 세부적인 내용을 살펴 보았지만 문제를 해결할 수는 없었습니다. 그래서 전체 솔루션을 가지고 있지 않습니다. –