java - 我如何在javaagents中使用redefineClasses()方法

标签 java instrumentation javaagents

我一直在使用 premain()addTransformer()。因为,当我使用服务器运行代理时,它会为某些类提供 javassist.ClassNotFound 异常,所以我想尝试使用 agentMain()redefineClasses()。我浏览了很多链接,但到目前为止我找不到一段代码可以让我清楚地了解如何使用这两种方法设置一个简单的 java 代理。一些帮助将非常感激。

我们可以将 redefineClasses()premain() 一起使用吗? (当我们使用redefineClasses()时,我们还需要transform方法吗?)

我正在尝试检测一组类的方法,其中我知道这些类的完全限定名称为com.test.Foo。我想在不检查加载到 JVM 上的整套类的情况下对它们进行检测。我一直在来回阅读这些文档,但我仍然无法清楚地了解如何使用该 redefineClasses 方法?

最佳答案

您可以调用redefineClasses从任何地方,也可以从 premain方法只不过是对 main 之前由同一 JVM 进程运行的普通 Java 程序的扩展。方法。

运行重新定义的一个简单示例是:

instrumentation.redefineClasses(new ClassDefinition(Foo.class, new byte[] {...}));

这边,Foo设置为由字节数组表示,该数组必须包含 Foo 的有效类文件其中字段和方法的所有签名与加载的 Foo.class 相同。您可以使用 ASM 等工具来检测类。

如果你真的只想检测Foo ,那么这可能就是替代使用 ClassFileTransformer 的方法。 .

关于java - 我如何在javaagents中使用redefineClasses()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33034001/

相关文章:

java - 更改 "static final"字段的值

java - 检测、通知和同步的含义

java - Byte Buddy 将 Try block 添加到现有方法中

java - 获取LinkedList的LinkedList中最长的LinkedList的最快方法是什么?

java - “打开方式”对话框

java - Gradle Jar 无法正确编译 .jar?

maven - 使用 Maven exec 插件指定 javaagent 参数

java - JTabbedPane - 无法删除单个选项卡

android - 在 2 台设备上运行 android 仪器测试

Java新手: How to use Java Agent From the Command Line for Instrumentation