Getting "ArrayIndexOutOfBoundsException: null" with NO stack trace

2022-09-01 13:12:56

In our log files we find the following:

[2012-09-24 00:09:32.590 +0000UTC] ERROR host server1 [] [] somepackage.someclass [] [Unknown] [V3rAqPaDvvAAAAExEXhdWGyh] [pjsQwTGHzxcAAAE5j4YdGvWV] "ThreadName"  Some error happened:  java.lang.ArrayIndexOutOfBoundsException: null

There is only this single line, and NO exception stack trace.

The block in which this exception happens is executing dynamically-generated Java byte-code which was created using javassist.try

I am wondering about two things:

  1. The : nulljava.lang.ArrayIndexOutOfBoundsException
  2. The missing stack-trace, despite calling the log hook using inside the block, which ordinarily would lead to a full stack-trace being printed in the log-file.logger.error("message", theException)catch

My Questions:

  1. What kind of code can cause a logging output "java.lang.ArrayIndexOutOfBoundsException: null". I try to reproduce this with a test program with no luck. I always get something like "java.lang.ArrayIndexOutOfBoundsException: Index: 3" or similar.

  2. Could the reason for missing stack-trace, be that this code is dynamically generated at runtime, and as such the logger/JVM does not "know" the stack-trace or relevant line number(s)?

We are currently debugging and investigating to get more info, but maybe this sounds familiar to somebody.


答案 1
  1. String concatenated with a reference might get you such a message:null

    Object obj = null;
    throw new ArrayIndexOutOfBoundsException("" + obj);
    
  2. If you're using an Oracle JVM you may want to add as an additional parameter to see if it helps. For some basic exceptions, the JVM reuses the same exception instance after a while, in which case there's no stack trace anymore. This option prevents the reuse, so you always get a stack trace.-XX:-OmitStackTraceInFastThrow

Edit note: this last could also apply to a recent version of OpenJDK (e.g., 1.8)


答案 2

I found pretty much the same behavior with disappointing log as shown below:

java.lang.ArrayIndexOutOfBoundsException: null

In my case, the problem was in concurrent ArrayList.add calls (two separate threads added elements into shared unsynchronized list). The most interesting thing: first ArrayIndexOutOfBoundsException always had stacktrace and descriptive message, all future ArrayIndexOutOfBoundsExceptions were without stacktrace and message. Tried to reproduce on separate project with plain java threads - no luck (always got full stacktraces etc).

PS. OpenJDK 11, jetty server.


推荐