2012-04-20 5 views
2

Я пытался построить профилировщик с помощью http://www.ibm.com/developerworks/java/library/j-jip/Ошибка при использовании Java агента

Один из моих Java-приложений при выполнении в командной строке

java -jar abc.jar 

дает требуемую мощность, но при использовании javaagent в профиль те же Приложение дает ошибку

java -javaagent:profiler.jar -jar abc.jar 

дает следующее сообщение об ошибке

Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at 
branch target 20 in method 
()V at offset 12 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
     at java.lang.Class.getMethod0(Unknown Source) 
     at java.lang.Class.getMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.getMainMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 

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

+0

Какую версию JDK вы используете для создания своего профилировщика и приложения? – mazaneicha

+0

Я использую версию JDK 1.6 – Raj

+0

Пожалуйста, проверьте это сообщение и посмотрите, что-либо применимо к вашему делу: http://stackoverflow.com/questions/100107/reasons-of-getting-a-java-lang-verifyerror – mazaneicha

ответ

4

Вы уверены, что используете целевую JVM-модель в JDK6? JDK 7 ужесточил проверки, выполняемые на кадрах кадров стека, и это может привести к таким исключениям VerifyError, когда байт-код был изменен инструментами, не подозревающими об этих изменениях.

Двойная проверка целевой JVM, и если вы обнаружите, что используете JDK 7, вы можете переключиться на JDK 6 или использовать переключатель «-XX: -UseSplitVerifier», чтобы изменить верификатор на версию JDK 6.

+0

как использовать "-XX: -UseSplitVerifier" – Raj

+0

"java -XX: -UseSplitVerifier -jar abc.jar" должен работать. –

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