2011-01-04 8 views
2

Java 응용 프로그램 용 에이전트를 작성해야합니다. 모든 배열 작성시 특정 작업을 수행합니다. 지금까지이 이벤트에서 코드를 실행할 방법을 찾지 못했습니다.Java 에이전트, 계측 및 배열 생성

  1. java.lang.instrument.ClassFileTransformer는 "배열 클래스"를 가져 오지 않으므로 "배열의 생성자"에 연결하지 않아도됩니다. 그리고
  2. 더 JVMTI 이벤트는이

모든 제안에 해당되지 "배열 클래스는 결코 수정할 수 있습니다"?

+0

모든 배열을 만들 때 캡처하는 것보다 원하는 결과를 얻는 방법이 가장 좋습니다. 너 뭐하려고? – jzd

답변

3

이렇게하려면 응용 프로그램의 바이트 코드를 수정해야합니다. 나는 ObjectWeb ASM이 직업을위한 최고의 도구 인 것을 발견했다.

  1. 당신이 관심있는 클래스를 가로채는 JVMTI 에이전트를 만들기
  2. 은 ASM 클래스 변압기 악기로 원하는 클래스를 전달합니다 일반적인 생각이다..
  3. 클래스 변환기에서 배열 구성과 관련된 Java opcode를 가로 챌 수 있습니다 (예 : 와우와 레이 (자세한 내용은 JVM spec 참조).
+0

모든 배열 생성을 캡처하고 싶습니다. 그런 다음 해당 클래스의 모든 메소드를 캡처하여 해당 클래스에 대한 지침을 찾도록 제안 하시겠습니까? – Nikem

+0

@Nikem : 메서드 정의를 수정하면 런타임에 메서드 호출을 가로채는 것이 아닙니다. 배열 작성을 처리하기 위해 추가하는 코드 이외에 런타임 오버 헤드가 추가로 필요하지 않습니다. – axw