远程运行时检测
Remote Runtime Instrumentation
我是仪器界的新手。
我正在尝试在运行时检测远程 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[] 包含什么...如果它包含加载的 类(我假设)那么为什么它是空的..
有什么帮助吗?
我写了那个代码,但我不明白你想在你的代码中做什么。引用的 github 要点参考了 this SO question 的答案,因此它可能会帮助您重新阅读该问题。
涉及到多个步骤,classes需要具体的打包方式,但基本是:
- 使用 AgentInstaller 将检测代理安装到 运行 JVM 中。
- 通过 JMX 连接到 JVM。
- 调用
transformClass(String className, String methodName, String methodSignature)
MBean 操作以使用演示转换器检测 class。
我是仪器界的新手。 我正在尝试在运行时检测远程 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[] 包含什么...如果它包含加载的 类(我假设)那么为什么它是空的..
有什么帮助吗?
我写了那个代码,但我不明白你想在你的代码中做什么。引用的 github 要点参考了 this SO question 的答案,因此它可能会帮助您重新阅读该问题。
涉及到多个步骤,classes需要具体的打包方式,但基本是:
- 使用 AgentInstaller 将检测代理安装到 运行 JVM 中。
- 通过 JMX 连接到 JVM。
- 调用
transformClass(String className, String methodName, String methodSignature)
MBean 操作以使用演示转换器检测 class。