Java Attach API を使用して接続するネイティブ JVMTI エージェントがあります。エージェントは基本的に実行するだけAgent_OnAttach
で存在します。エージェントから、エージェントを接続した VM に情報を渡したいと考えています。エージェントをアタッチした VM の stdout に書き込むだけでも問題ありません。ソケットや名前付きパイプなどの帯域外手段を使用できることは承知していますが、組み込みのものを探しています。
質問する
456 次
1 に答える
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... を呼び出すことができます。
于 2014-12-23T08:50:42.173 に答える