JVMTI与附加vm进行通信

时间:2014-11-18 20:05:16

标签: java jvmti java-attach-api

我有一个使用Java Attach API附加的本机JVMTI代理。代理基本上只运行Agent_OnAttach然后存在。我想将代理中的信息传递给附加代理的VM。即使只是写入附加代理的VM的stdout也没关系。我知道我可以使用带外装置,如插座或命名管道,但我正在寻找内置的东西。

1 个答案:

答案 0 :(得分:0)

您真的想与JVM或内部运行的应用程序进行通信吗?如果您想与您的应用程序通信,Agent_Onload将会提前,因为您的应用尚未加载。相反,您可以使用VMInit事件:

void JNICALL
VMInit(jvmtiEnv *jvmti_env,
        JNIEnv* jni_env,
        jthread thread)

这使您可以访问JNI,从而可以执行Java代码。例如,您可以使用它来设置稍后可以由类读取的系统属性。如果您想与任何特定类进行通信,此事件可能仍处于早期阶段,您可能会等待相应的ClassPrepare事件并检查您的课程何时可用:

void JNICALL
ClassPrepare(jvmtiEnv *jvmti_env,
        JNIEnv* jni_env,
        jthread thread,
        jclass klass)

如果你想写入stdout,你当然可以使用JNI来调用System.println ......