获取 JVM 方法调用

Pick up JVM method invocation

我如何记录 JVM 在 运行 时执行的所有方法调用及其参数,也许可以更改方法参数,在调用方法之前做一些事情,而不更改 JVM 代码本身?

我已经 运行 到

  1. 仪器(http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html
  2. DTrace 及其代码 (http://github.com/dtrace4linux/linux),

但我是一个新手,不了解 JVM 的具体细节,我的主要问题是 - 从这段代码(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

从技术上讲,可以在 JVM 上使用自己的 javaagent. Alternatively you can use AspectJ framework and its Load Time Weaver 来简化此过程。

勾选this article for sample and repository for some code: https://bitbucket.org/espinosa/methodcallspy0

不幸的是 Dalvik/ART 不支持 javaagent,所以这只能在 'real' JVM 上运行,但不能在 android.

上运行