Агент Java, инструменты и создание массива
-
15-10-2019 - |
Вопрос
Мне нужно написать агент для моего приложения Java, который делает некоторые конкретные вещи на каждом создании массива. До сих пор я не смог найти способ запустить свой код на этом событии.
- java.lang.instrument.classfileTransformer не получает «классы массива», поэтому нет способа зацепить «конструктор массива». И «классы массива никогда не поддаются изменению»
- Не соответствует этому событию JVMTI
Какие-либо предложения?
Решение
Вам нужно изменить байт-код вашего приложения для этого. я обнаружил ObjectWeb ASM быть лучшим инструментом для работы. Общая идея - это:
- Создайте агента JVMTI, который перехватывает интересы вас классы.
- Передайте классы, которые вы хотите инструментально, на трансформатор класса ASM.
- В трансформаторе класса вы можете перехватить Java Opcodes, связанные с построением массива, например, Anewarray (см. JVM Spec для большего).
Не связан с StackOverflow