2013-05-15 1 views
0

Я хотел использовать некоторые методы/классы в Java. Для этого я написал Java-агент, который отображает только несколько классов, которые я выбираю.java.lang.reflect.InvocationTargetException получает бросок, когда управление байт-кодом завершено с помощью asm.

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

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/nio/Buffer;
  • Ljava/util/HashMap $ Entry;
  • Ljava/nio/HeapCharBuffer;
  • Ljava/nio/CharBuffer;
  • Ljava/lang/ClassLoader;
  • Ljava/lang/Class;
  • Ljava/util/HashMap;
  • Ljava/nio/ByteBuffer;
  • Ljava/lang/System;
  • Ljava/io/BufferedWriter;
  • Ljava/lang/String;
  • Ljava/io/OutputStreamWriter;
  • Ljava/io/BufferedOutputStream;
  • Ljava/nio/charset/CoderResult;
  • Ljava/io/Writer;
  • 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 

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

ответ

0

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

+0

Какая ошибка вы нашли? – AKS

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

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