我如何记录所有方法调用及其参数,由 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 .或者你可以使用 AspectJ框架及其 Load Time Weaver来简化这个过程。
检查 this article对于一些代码的示例和存储库:https://bitbucket.org/espinosa/methodcallspy0
不幸的是,Dalvik/ART 不支持 javaagent,所以这只能在“真正的”JVM 上工作,但不能在 android 上工作。
关于java - 获取 JVM 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28240105/