我试图找出函数加载到 JVM 后是否可以获取该函数的字节码。
我知道我可以使用 ClassLoder 从 .class
文件中获取代码,并且可以使用 Instrumentation 对其进行操作,但这不是这里的问题。
假设我有一个编译好的Java程序,名为Test.class
,我运行它,它的字节码将被加载到JVM中,从这一点上我可以获得字节码吗?
编辑: 按照我想再次指出的答案,我的目的是检查 JVM 上运行的代码,但我无权访问其编译文件。
最佳答案
没有更多上下文,我不确定您要做什么,但是:
如果您只想查看类文件的内容(字节码和所有内容),那么 javap -c Test.class
将为您吐出。
如果您想查看 JVM 运行时的代码,请输入 agent可能就是您正在寻找的。p>
请记住,如果您的函数(方法?我假设我们在这里讨论的不是 lambda)依赖于父作用域中的任何变量,那么该方法的字节码不会描述它本身的作用。考虑内部类、lambda 表达式等
编辑:
正如 Peter Lawrey 所说,如果您想放弃代理,将类加载器中的原始字节输入 ASM 的访问者 API 是一个好的开始。 ASM 文档有一个教程;谷歌也出现了this (参见第 2 部分)。 HTH
关于java - 从 JVM 获取正在运行的字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127088/