Java-агент, инструментарий и создание массивов - PullRequest
2 голосов
/ 04 января 2011

Мне нужно написать агент для моего java-приложения, который выполняет определенные вещи при каждом создании массива. До сих пор я не смог найти способ запустить мой код для этого события.

  1. java.lang.instrument.ClassFileTransformer не получает «классы массива», поэтому невозможно подключиться к «конструктору массива». И «классы массива никогда не модифицируются»
  2. этому событию не соответствует ни одно событие JVMTI

Есть предложения?

1 Ответ

3 голосов
/ 04 января 2011

Для этого вам нужно изменить байт-код вашего приложения.Я считаю ObjectWeb ASM лучшим инструментом для работы.Общая идея заключается в следующем:

  1. Создать агент JVMTI, который перехватывает интересующие вас классы.
  2. Передайте классы, которые вы хотите использовать, в преобразователь классов ASM.*
  3. В преобразователе классов вы можете перехватывать коды операций Java, связанные с построением массива, например, ANEWARRAY (подробнее см. JVM spec ).
...