2013-06-28 2 views
3

나는 최근에 자바 프로그램의 디버그 정보를 살펴보면 리플렉션보다 더 많은 정보를 얻을 수 있다고 들었다. 나는 정말로 기억 장소 등을 제외하고 무엇을 알지는 못한다는 것을 깨달았다. 그렇다면 리플렉션으로 얻을 수없는 디버깅 정보로 얻을 수있는 또 다른 것 (참고 : 실제 런타임 값을 얻기 위해 중단 점 사용에 대해 이야기하는 것이 아닙니다)? 디버거에서 가져올 수없는 리플렉션을 통해 얻을 수있는 정보가 있습니까?리플렉션으로 얻을 수없는 디버거 정보는 어떻게 얻을 수 있습니까?

답변

1

메신저 "디버거 정보 사용"은 실제로 "agent API 사용"을 의미한다고 가정합니다. 이는 디버거가 (무엇보다도) 사용하는 것입니다.

답변이 상당히 많습니다.

시작을위한 JVMTI는 force garbage collection 일 수 있습니다. 순수 자바 API는 없습니다. 특정 유형의 응용 프로그램에 대해서는 일반적인 지혜와 달리 때때로 "프로덕션"코드에도 유용 할 수 있습니다.

로드 할 때 클래스를 계측 할 수도 있습니다. 이는 다양한 프로파일 러 도구, 컴파일 된 코드 (암호화 된 클래스 파일)의 난독 화 및 소스 코드의 변경에 대한 응답으로로드 된 클래스를 즉시 변경하는 데 유용합니다.

+0

에이전트는 말할 것도없이 Java가 아닌 C로 실행되므로 메모리 안전 제한이 없으므로 프로세스에 대해 원하는 그대로 변경할 수 있습니다. API를 통해 사용할 수있는 또 다른 사항은 다른 상위 수준 스택 프레임의 변수 및 스택 프레임 자체에 대한 메타 데이터에 대한 액세스입니다. 별도의 자바 프로세스에서 코드를 작성하고자한다면'jdwp' 에이전트를 통해 API를 사용할 수 있습니다 (이것이 대부분의 디버깅 툴이하는 일이라고 생각합니다). – Dan

관련 문제