获取 JVM 方法调用
Pick up JVM method invocation
我如何记录 JVM 在 运行 时执行的所有方法调用及其参数,也许可以更改方法参数,在调用方法之前做一些事情,而不更改 JVM 代码本身?
我已经 运行 到
- 仪器(http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html)
- 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
从技术上讲,可以在 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.
上运行
我如何记录 JVM 在 运行 时执行的所有方法调用及其参数,也许可以更改方法参数,在调用方法之前做一些事情,而不更改 JVM 代码本身?
我已经 运行 到
- 仪器(http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html)
- 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
从技术上讲,可以在 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.
上运行