远程运行时检测

时间:2016-04-06 15:24:58

标签: java instrumentation agent javassist javaagents

我是仪器界的新手。 我试图在运行时检测远程JVM。 实际上,我必须记录所有类或部分类并转换它们。 我已经阅读了很多文档,我发现了这段代码HERE

我更改了代码,我更换了

// Run sayHello in a loop
Person person = new Person();
for(int i = 0; i < 1000; i++) {
    person.sayHello(i);
    person.sayHello("" + (i*-1));
    Thread.currentThread().join(5000);
}

这一个:

for (int i = 1; i < args.length; i++) {
    String className = args[i] ;
    System.out.println("className" + className);
    // Call transformClass on the transformer MBean
    server.invoke(on, "transformClass", new Object[]{className}, new String[]{String.class.getName()});
}

但我发现args.length = 0 我不知道args []包含什么......如果它包含加载的类(我假设)那么为什么它是空的..

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

我编写了该代码,但我不了解您在代码中尝试做的事情。引用的github gists参考了this SO question的答案,因此它可以帮助您重新阅读该问题。

涉及多个步骤,并且需要以特定方式打包类,但基础是:

  1. 使用AgentInstaller将检测代理程序安装到正在运行的JVM中。
  2. 通过JMX连接到JVM。
  3. 使用演示变换器调用transformClass(String className, String methodName, String methodSignature) MBean操作来检测类。