java - 获取 JVM 方法调用

标签 java android jvm

我如何记录所有方法调用及其参数,由 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 .或者你可以使用 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/

相关文章:

java - JPanel 位置被 BufferStrategy 重击

java - 如何导入适用于 Java 的 Drive API 客户端库和 Google Sheets API 版本 3.0

java - Java VM 是否会因其编码而变慢?

linux - 64 位 Linux 上的进程内存和 CPU 限制?

java - 创建Java虚拟机失败

java - JScrollPane 不更新滚动条

java - 级联类型 : ALL, MERGE 等

java - 如何在每行添加3个按钮

java - 如何更改 ListView 中每个项目的背景颜色?

android - 即使在应用程序卸载后也存储应用程序数据