2015-01-30 5 views
4

어떻게 런타임에 JVM에서 수행 한 인수와 함께 모든 메서드 호출을 기록 할 수 있으며 메서드 인수가 변경 될 가능성이 있으며 메서드가 호출되기 전에 JVM 코드 자체를 변경하지 않고 수행 할 수 있습니까?JVM 메서드 호출 받기

는 이미

  1. 계측의 코드 (http://github.com/dtrace4linux/linux)와 (http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html)
  2. DTrace를,

를 통해 실행했다하지만 난 JVM이 nitty- 그것으로 구성하는 방법에 안돼서 껄끄 러운 세부 사항 및 주요 질문 -이 코드 (Dtrace 코드)로 시작하는 올바른 방법입니까? 어쩌면 나에게 읽을 기사를 줄 수 있니?

또한 ART 또는 dalvik에서 동일한 작업을 수행 할 수 있습니까? (JDWP의 도움을 받아 디버깅 가능한 애플리케이션 일뿐만 아니라).

그리고 한 가지 더 - JMVTI가 너무 느리며 호출 처리기에서 약 300μs가 걸립니다.

편집 :

링크, 내가 가지고 :

https://code.google.com/p/droidbox/

http://mostly-about-java.blogspot.ru/2012/12/methodcallspy-building-own-method_3.html?m=1

https://github.com/JakeWharton/hugo

https://www.yourkit.com

+2

여러 개의 서로 다른 질문을 한 것처럼 들리지만 모두 서로 다른 답변을 갖고 있기 때문에 불분명하게 표시됩니다. 그것이 실제로 사실 인 경우에, 당신은 각각을 개별적으로 요구할 필요가 있습니다. "이 코드로 시작하는 것이 올바른 방법일까요?" 어떤 코드? JVM은 무엇입니까? 첫 번째 질문에 대한 해결책은 무엇입니까? 두 번째 질문은? – nihilon

+0

또한, 이것이 데스크탑 JVM 질문입니다. 솔루션이 Dalvik/Art에도 적용되는지 궁금해서 Android 태그를 추가 했습니까? – fadden

+0

예, 궁금합니다. 나는 안드로이드 개발자이고, 나는 aosp 코드를 변경하고, 우리 자신의 시스템 애플 리케이션을 만들었지 만, 이제 나는 jvm을 사용하여 훨씬 더 큰 솔루션을 원한다. 물론, 안드로이드에 대한 작업. – KorixD

답변

0

기술 그것은 자신의 javaagent을 사용하는 JVM에서 가능합니다. 또는 AspectJ 프레임 워크와 그 Load Time Weaver을 사용하여이 프로세스를 단순화 할 수 있습니다. 몇 가지 코드 샘플 및 저장소에 대한

확인 this article :

https://bitbucket.org/espinosa/methodcallspy0 불행하게도 달빅/ART가 javaagent을 지원하지 않습니다 그래서 이것은 단지 '진짜'JVM에서 작동,하지만 안드로이드에 대한 것입니다.

+0

핫스왑을 사용하지 않고 완벽한 세상에서 런타임에 작업하는 앱을 원합니다. 하지만 정보에 감사드립니다! – KorixD