Debug NoClassDefFoundError

Christian Beikov christian.beikov at gmail.com
Tue May 18 10:40:09 UTC 2021


I understand. Anyway, big +1 from my side for attaching these exceptions 
somehow. That was the missing piece to understand what was wrong in my 
case. If you can't attach the exceptions, maybe the exception message 
could at least tell a user to activate this flag in order to receive 
further details? That would have been very helpful for me at least, but 
I guess also for others.

Regards,

Christian

Am 18.05.2021 um 12:10 schrieb David Holmes:
> 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