2014-11-18 3 views
0

У меня есть собственный агент JVMTI, который я прикрепляю с помощью API Java Attach. Агент в основном просто запускает Agent_OnAttach, а затем существует. Я хотел бы передать информацию от агента к виртуальной машине, которая привязала агента. Даже просто писать на stdout виртуальной машины, которая привязала агента, было бы хорошо. Я знаю, что я мог использовать внеполосные средства, такие как сокеты или именованные каналы, но я ищу что-то встроенное.JVMTI общается с приложением vm

ответ

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) 

Если вы хотите записать на стандартный вывод, вы может, конечно, использовать JNI для вызова System.println ...

+0

Я хочу связаться с агентом. Агент собирает кучу данных (итерации по нескольким объектам, которые ищут конкретные). Для этой информации нужна прилагаемая виртуальная машина (а не та, в которой работает агент). –

+1

Насколько я знаю, вы не можете напрямую общаться с агентом с вашей виртуальной машины, особенно если это другой процесс. Я думаю, что проще всего было бы создать сетевой сокет в вашем агенте и подключиться к нему со своей другой виртуальной машины. Тогда вы можете обмениваться любой информацией, которая вам нравится –

+0

Вот что я предположил, спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^