java.lang.instrument.IllegalClassFormatException

7,443 views
Skip to first unread message

Philip Bergen

unread,
Aug 30, 2012, 12:11:56 PM8/30/12
to jac...@googlegroups.com
Are there known circumstances in which the agent will fail?
Every single (as far as I can tell, I have 240MB of output like this from one run) of our classes fail to load:

java.lang.instrument.IllegalClassFormatException: Error while instrumenting class lib/logging/LoggingConfig.
	at org.jacoco.agent.rt_3vqbej.CoverageTransformer.transform(CoverageTransformer.java:94)
	at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at turbo.loader.SubLoader.loadClassFromTL(SubLoader.java:75)
	at turbo.loader.TurboLoader.innerLoadClass1(TurboLoader.java:404)
	at turbo.loader.TurboLoader.innerLoadClass(TurboLoader.java:312)
	at turbo.loader.TurboLoader.loadClass(TurboLoader.java:266)
	at turbo.loader.TurboLoader.loadClass(TurboLoader.java:261)
	at java.util.logging.LogManager.readConfiguration(LogManager.java:741)
	at java.util.logging.LogManager$2.run(LogManager.java:267)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:265)
	at java.util.logging.LogManager.getLogManager(LogManager.java:248)
	at java.util.logging.Logger.<init>(Logger.java:225)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1092)
	at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1089)
	at java.util.logging.LogManager$1.run(LogManager.java:180)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.util.logging.LogManager.<clinit>(LogManager.java:157)
	at java.util.logging.Logger.getLogger(Logger.java:287)
	at sun.management.snmp.util.MibLogger.<init>(MibLogger.java:57)
	at sun.management.snmp.util.MibLogger.<init>(MibLogger.java:42)
	at sun.management.jmxremote.ConnectorBootstrap.<clinit>(ConnectorBootstrap.java:760)
	at sun.management.Agent.startAgent(Agent.java:135)
	at sun.management.Agent.startAgent(Agent.java:239)

Any insight that might help me get past this road block will be treasured.

Thanks,

// Phil

Marc R. Hoffmann

unread,
Aug 30, 2012, 4:33:08 PM8/30/12
to jac...@googlegroups.com
Hi,

this looks like some internal error in JaCoCo while instrumenting a
class file. Unfortunately the root cause is not logged properly. I just
fixed this. Can you please try the agent from the latest trunk build
jacoco-0.5.10.201208302019.zip at

http://sourceforge.net/projects/eclemma/files/07_JaCoCo/trunk/

This should now also print the root cause.

BTW, do you know what product uses the class loaded called
"turbo.loader.TurboLoader"?

Best regards,
-marc
> --
>
>


hoff...@mountainminds.com

unread,
Aug 31, 2012, 2:01:12 AM8/31/12
to jac...@googlegroups.com
Phil,

can you please provide a problematic class file as seen by the Java agent? This would allow me to debug the problem. The JaCoCo agent as a option classdumpdir to dump all classes before instrumentation. So for example:

  -javaagent:jacocoagent.jar=classdumpdir=/temp/classes

Please check documentation for details: http://www.eclemma.org/jacoco/trunk/doc/agent.html

Thanks,
-marc

Philip Bergen

unread,
Aug 31, 2012, 5:35:19 PM8/31/12
to jac...@googlegroups.com
Thanks both for the fast feedback. I'm trying out 0.5.10, releaseday yesterday, so a little strapped. Seems 0.5.10 does not have this problem.
I'll be back when I know something more definitive.

Thanks,

// Phil

sa...@chare.eu

unread,
Oct 15, 2012, 6:01:49 AM10/15/12
to jac...@googlegroups.com
I have the exception with more info and the class file, can I send it to you ? (I do not see any way to attach it)

Petr


java.lang.instrument.IllegalClassFormatException: Error while instrumenting class com/chare/mcb/entity/User.
at org.jacoco.agent.rt_kqcpih.CoverageTransformer.transform(CoverageTransformer.java:91)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:424)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
at java.lang.Class.getDeclaredMethods(Class.java:1808)
at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.checkforTestAnnotatedMethod(JUnit4TestChecker.java:83)
at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.isValidJUnit4Test(JUnit4TestChecker.java:72)
at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.accept(JUnit4TestChecker.java:52)
at org.apache.maven.surefire.util.DefaultDirectoryScanner.locateTestClasses(DefaultDirectoryScanner.java:80)
at org.apache.maven.surefire.junit4.JUnit4Provider.scanClassPath(JUnit4Provider.java:174)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at org.jacoco.agent.rt_kqcpih.core.internal.instr.FrameTracker.visitInsn(FrameTracker.java:240)
at org.jacoco.agent.rt_kqcpih.asm.MethodVisitor.visitInsn(Unknown Source)
at org.jacoco.agent.rt_kqcpih.asm.MethodVisitor.visitInsn(Unknown Source)
at org.jacoco.agent.rt_kqcpih.core.internal.flow.MethodProbesAdapter.visitInsn(MethodProbesAdapter.java:64)
at org.jacoco.agent.rt_kqcpih.asm.tree.InsnNode.accept(Unknown Source)
at org.jacoco.agent.rt_kqcpih.asm.tree.InsnList.accept(Unknown Source)
at org.jacoco.agent.rt_kqcpih.asm.tree.MethodNode.accept(Unknown Source)
at org.jacoco.agent.rt_kqcpih.core.internal.flow.ClassProbesAdapter$1.visitEnd(ClassProbesAdapter.java:124)
at org.jacoco.agent.rt_kqcpih.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt_kqcpih.asm.ClassReader.accept(Unknown Source)
at org.jacoco.agent.rt_kqcpih.core.instr.Instrumenter.instrument(Instrumenter.java:69)
at org.jacoco.agent.rt_kqcpih.core.instr.Instrumenter.instrument(Instrumenter.java:82)
at org.jacoco.agent.rt_kqcpih.CoverageTransformer.transform(CoverageTransformer.java:89)
... 32 more

Marc R. Hoffmann

unread,
Oct 15, 2012, 1:56:04 PM10/15/12
to jac...@googlegroups.com
I'll send you and direct contact email.

Best regards,
-marc

Marc R. Hoffmann

unread,
Oct 17, 2012, 1:22:44 AM10/17/12
to jac...@googlegroups.com
The class has already been instrumented with cobertura. This shouldn't lead to an IllegalClassFormatException but I don't think is is good idea to run two coverage tools at the same time.

Cheers,
-marc

Marc R. Hoffmann

unread,
Oct 17, 2012, 1:29:48 AM10/17/12
to jac...@googlegroups.com
Ok, here the problem: As the class has already been instrumented with Cobertura, stack map frame information is already broken (Cobertura can't create valid Java7 files, see http://sourceforge.net/tracker/?func=detail&aid=3408140&group_id=130558&atid=720015). JaCoCo only works on correct class files.

So if you want to use JaCoCo, please do not use Cobertura at the same time.

Best regards,
-marc
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages