java - 从 JVM 获取正在运行的字节码

标签 java jvm

我试图找出函数加载到 JVM 后是否可以获取该函数的字节码。

我知道我可以使用 ClassLoder 从 .class 文件中获取代码,并且可以使用 Instrumentation 对其进行操作,但这不是这里的问题。

假设我有一个编译好的Java程序,名为Test.class,我运行它,它的字节码将被加载到JVM中,从这一点上我可以获得字节码吗?

编辑: 按照我想再次指出的答案,我的目的是检查 JVM 上运行的代码,但我无权访问其编译文件。

最佳答案

没有更多上下文,我不确定您要做什么,但是:

如果您只想查看类文件的内容(字节码和所有内容),那么 javap -c Test.class将为您吐出。

如果您想查看 JVM 运行时的代码,请输入 agent可能就是您正在寻找的。

请记住,如果您的函数(方法?我假设我们在这里讨论的不是 lambda)依赖于父作用域中的任何变量,那么该方法的字节码不会描述它本身的作用。考虑内部类、lambda 表达式等

编辑:

正如 Peter Lawrey 所说,如果您想放弃代理,将类加载器中的原始字节输入 ASM 的访问者 API 是一个好的开始。 ASM 文档有一个教程;谷歌也出现了this (参见第 2 部分)。 HTH

关于java - 从 JVM 获取正在运行的字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127088/

相关文章:

java - 以编程方式将布局添加到 fragment

java - IDEA 11 Ultimate 中的智能字符串替换/补全

java - 数据表数据错误地附加到表中

java - java中的系统属性

java - 重构类以提高效率

java - 为什么 long 和 double 在 Java 类的常量池中占用两个条目?

java - JMockit注入(inject)嵌套成员变量

java - Slick2d 错误

java - 这些 Java 字节偏移量是如何计算的?

Java 程序在 Microsoft Server 上每个用户一个进程