java.lang.reflect.InvocationTargetException возникает, когда инструментарий байт-кода завершается с помощью asm.

Я хотел использовать некоторые методы/классы в Java. Для этой цели я написал агент Java, который обрабатывает только несколько классов, которые я выбираю.

Я использую следующий код, чтобы получить загруженные классы и отфильтровать некоторые из них:

 instrumentation.addTransformer(myTransformer,true);

 Class[] loadedClasses=instrumentation.getAllLoadedClasses();

 Class[] modifiableClasses=ModifiableClasses(loadedClasses,instrumentation);

Class[] filteredClasses=filterClasses(modifiableClasses);

if(instrumentation.isRetransformClassesSupported()){
        System.out.println("retransformation is Supported");
        instrumentation.retransformClasses(filteredClasses);
     }

это не должно создавать никаких проблем. filterClasses возвращает некоторые классы, которые я хочу использовать в обычном режиме.

  • Лява/нио/буфер;
  • Ljava/util/HashMap$Entry;
  • Ljava/nio/HeapCharBuffer;
  • Ljava/nio/CharBuffer;
  • Ljava/язык/ClassLoader;
  • язык/язык/класс;
  • Ljava/util/HashMap;
  • Ljava/nio/ByteBuffer;
  • Язык/язык/Система;
  • Ljava/io/BufferedWriter;
  • Ява/язык/строка;
  • Ljava/io/OutputStreamWriter;
  • Ljava/io/BufferedOutputStream;
  • Ljava/nio/charset/CoderResult;
  • Лява/ио/Писатель;
  • Ljava/util/HashSet;
  • Ljava/nio/charset/CharsetEncoder;
  • Ljava/io/FileOutputStream;
  • Ljava/io/PrintStream;

все работает нормально, я печатаю инструментальные и неинструментальные классы в определенных папках для отладки. Я использую asm CoreAPI для добавления некоторых инструкций в начале и в конце методов. Я не использую конструкторы, нативные методы, абстрактные методы и статические переменные. Когда я просто использую новые загружаемые классы, все работает нормально. Думаю, я что-то не понимаю с ClassLoader или что-то конкретное, вот что я получаю в консоли:

    Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)
     Caused by: java.lang.InternalError
    at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
    at sun.instrument.InstrumentationImpl.retransformClasses(Unknown Source)
    at my.Agent.Watcher.premain(Watcher.java:88)
    ... 6 more
    FATAL ERROR in native method: processing of -javaagent failed

Я благодарен за любую помощь, я могу получить даже ссылку или подсказку в правильном направлении.


person ChriZin    schedule 15.05.2013    source источник


Ответы (1)


Извините, ребята, за мою ошибку после более точного просмотра инструментированных классов я обнаружил ошибки, которые мне придется решить, если я хочу, чтобы это работало. Админ/модератор может закрыть эту тему.

person ChriZin    schedule 16.05.2013