TL;DR: Find the line where the exception occurs and then add a conditional breakpoint which checks the local variables for values that would trigger the exception.
In Eclipse, you can stop on any exception by using the menu Run -> “Add Java Exception Breakpoint…“.
That’s great but it doesn’t help when you want to stop on a certain exception on a certain line. It’s a big problem with code that uses exceptions for control flow – you could have thousands of those exceptions before you get to the one which you care about.
In my case, I had a NullPointerException in java.util.concurrent.ConcurrentHashMap:
public V get(Object key) {
Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek;
int h = spread(key.hashCode()); <-------- key is null
...
I tried to add a conditional breakpoint here with the condition key == null but Eclipse complained that it couldn’t compile the expression (probably missing debug information).
The method was called from Jetty’s ClassInheritanceHandler, so I added a conditional breakpoint there.
That’s another reason to copy method results into local variables before using them.
Posted by digulla