Debug NoClassDefFoundError
David Holmes
david.holmes at oracle.com
Tue May 18 10:10:54 UTC 2021
On 18/05/2021 5:54 pm, Christian Beikov wrote:
> Thanks so much for this David Holmes! This flag is awesome!
>
> Why are these exceptions not attached as suppressed exceptions on the
> NoClassDefFoundError? That would certainly help a lot of users. In my
> case, I am missing a few read-edges for the module descriptor.
It has been considered, but the original exception occurred at an
unrelated point in the program (possibly in another thread) and so it
isn't directly a suppressed exception, nor a cause of the NCDFE. It was
also thought that it would be quite confusing to see the stacktrace of
another thread presented as-if it occurred in the current thread.
Cheers,
David
> Am 18.05.2021 um 04:51 schrieb David Holmes:
>> On 18/05/2021 2:19 am, Christian Beikov wrote:
>>> Hi,
>>>
>>> not sure if this is the right place to ask, so if I am wrong, please
>>> let me know where to ask this.
>>>
>>> I have a very strange problem with a generated class defined
>>> dynamically into a module through `MethodHandles.Lookup.defineClass`.
>>> When I try to instantiate it, I get a
>>> `java.lang.NoClassDefFoundError: Could not initialize class ...`
>>> without any further context:
>>
>> You get that exception when a class has been placed in the erroneous
>> state, which means that a previous attempt to initialize the class has
>> failed. As Remi indicated if you don't see that original exception it
>> is typically because something else has swallowed it. If the class is
>> dynamically generated such that there is no source code for you to
>> modify to debug the static initialization problem, then try running
>> with -Xlog:exceptions=trace to see if that shows you what the earlier
>> exception was.
>>
>> Cheers,
>> David
>>
>>>
>>> at
>>> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>>> Method)
>>> at
>>> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>>>
>>> at
>>> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>>>
>>> at
>>> java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
>>>
>>>
>>> Does anyone know how to further debug this? I was trying to find
>>> instructions for debugging the JVM itself but couldn't so far.
>>>
>>> Regards,
>>>
>>> Christian
>>>
>>>
More information about the hotspot-dev
mailing list