Good point Brandon. Also check out the more advanced conditionals you can use in the lower part of the breakpoint screen.
For example, for a more advanced algorithm, you might find yourself stepping along manually with F6 and hovering to check the variable values to find a specific condition. However, you could just set these conditions on the breakpoint (i.e. 5th iteration, foo is equal to the nth element of bar and bar.length is greater than 3. Now, as Ron Popeil says, "Just set it and forget it!"

This makes debugging wicked easy. But also be aware that just using a blanked "NullPointerException" breakpoint will expose poorly written code (yours or libs) that has wrapped blocks with try/catches instead of doing null checks (i.e. in JAXB).
Sincerely,
Joseph