你如何分析致命的-javaagent错误?

时间:2012-05-02 23:54:55

标签: java instrumentation javaagents

我正在尝试使用java.lang.instrument API向java.lang.Object构造函数添加静态方法调用。我知道我有正确的基础知识,因为如果我将方法调用System.gc(),它就可以工作。我通过运行带有和不带仪器的-verbosegc验证了这一点。如果我在自己的包中将方法调用更改为静态类/方法,则会出现致命错误:

本机方法中线程“main”FATAL ERROR中的异常:-javaagent的处理失败

在工作目录中没有创建转储文件,所以我发现很难弄清楚是什么问题。其他信息:

  • 我确保在转换前的premain方法中加载静态方法类
  • 静态方法调用不会导致创建新对象
  • 加载的最后一个类是InterruptedIOException,虽然我认为这只是一个副作用

提前致谢。

1 个答案:

答案 0 :(得分:1)

是的,正如@barry在评论中指出的那样,您必须在Java Agent中添加Boot-Class-Path定义。对我来说,我在代理中使用了javassist来创建字节码,所以我的清单看起来像这样:

Manifest-Version: 1.0
Premain-Class: com.company.agent.Agent
Agent-Class: com.company.agent.Agent
Boot-Class-Path: javassist-3.18.2-GA.jar agent.jar

我将所有应用程序的jar文件放在与javassist和agent jar相同的lib目录中。对于类路径中的所有内容,在同一文件夹中,它可以正常工作。