2010-07-12 5 views
4

현재 프로그램을 실행하는 동안 로컬 변수의 변수 이름에 액세스하여 외부에서 전달하려는 프로그램을 작성하고 있습니다. 디버그 모드로 컴파일하지 않으면 Java가 컴파일 중 로컬 변수 이름을 덤프한다는 것을 알고 있습니다.로컬 변수 이름에 자바 액세스

일부를 살펴본 후 JDI/JPDA가 이러한 종류의 작업을 수행하는 방법이라고 생각됩니다.

ref.suspend(); 
StackFrame currentFrame = ref.frame(0); 
List<LocalVariable> vars = currentFrame.visibleVariables(); 
ref.resume(); 

두 질문 : 다음, refThreadReference을 의미 가정은 내가 지금까지 무엇을 가지고

  1. 내가하고있는 바로 트랙을, 또는이 할 수있는 더 좋은 방법은 무엇입니까?
  2. ref으로 설정하려면 ThreadReference을 어떻게 받습니까? LocatableEvent 내가 필요한 것처럼 보이지만 누구나 사용법에 대한 예제를 제공 할 수 있습니까?

미리 감사드립니다.

+4

왜, 왜? 실행중인 메소드의 로컬 변수 * 이름 *을 쿼리 할 수있는 가능한 이유는 무엇입니까? –

+0

디버깅 도구 - 추가 평가/조작을 위해 변수를 Lisp의 REPL에 전달하고 싶습니다. 사용자가 여러 변수를 전달하는 경우 REAR에서 변수 이름을 다르게 처리하거나 모든 변수의 이름을 지정해야합니다. –

+0

가능한 [jdi로 간단한 디버거를 빌드하여 중단 점을 설정하고 변수의 값을 검색] (https://stackoverflow.com/questions/47939691/build-a-simple-debugger-with-jdi-to-set) -breakpoints-and-retrieval-the-value-of-a) –

답변

1

많은 사람들이이 물건에 대한 경험이 없습니다.

다른 곳에서 답을 찾으십시오. 코드에 대한 링크가 있지만 더 이상 존재하지 않습니다. 답변을 수락했기 때문에이 대답을 삭제할 수 없습니다.

+0

이게 내가 얻을 것 같은 최고인 것 같은데 ... :) 정보 주셔서 감사합니다. 그러나 JDPA 문서가 매우 혼란 스럽다는 것을 발견했습니다. –

+0

링크가 끊어진 것처럼 보입니다. 문제를 해결할 수 있습니까? @ 로고 –

0

예, 올바른 길을 가고 있습니다! JDI에 시작하려고하고 싶은 사람들을위한

는 "추적"예는 헤아릴 :

http://www.docjar.com/docs/api/com/sun/tools/example/trace/package-index.html

그것은 가능한 백본입니다. 이벤트를 사용하는 방법을 보여줍니다. 실제로는 ThreadReference를 줄 것입니다. 또한 프로그래밍 방식으로 두 번째 JVM을 시작하는 방법을 보여줍니다.