Java Debugging with JDB
Problem
The use of debugging printouts and assertions in your code is still not enough.
Solution
Use a debugger, preferably the one that comes with your IDE.
Explained
The JDK includes a command-line-based debugger, jdb, and any number of IDEs
include their own debugging tools. If you’ve focused on one IDE, learn to use the
debugger that it provides. If you’re a command-line junkie, you may want to learn at
least the basic operations of jdb.
Here is a buggy program. It intentionally has bugs introduced so that you can see
their effects in a debugger:
/** This program exhibits some bugs, so we can use a debugger */ public class Buggy { static String name; public static void main(String[] args) { int n = name.length( ); // bug # 1 System.out.println(n); name += "; The end."; // bug #2 System.out.println(name); // #3 } }Here is a session using jdb to find these bugs: ian> java Buggy Exception in thread "main" java.lang.NullPointerException at Buggy.main(Compiled Code) ian> jdb Buggy Initializing jdb... 0xb2:class(Buggy) > run run Buggy running ... main[1] Uncaught exception: java.lang.NullPointerException at Buggy.main(Buggy.java:6) at sun.tools.agent.MainThread.runMain(Native Method) at sun.tools.agent.MainThread.run(MainThread.java:49) main[1] list 2 public class Buggy { 3 static String name; 4 5 public static void main(String[] args) { 6 => int n = name.length( ); // bug # 1 7 8 System.out.println(n); 9 10 name += "; The end."; // bug #2 main[1] print Buggy.name Buggy.name = null main[1] help ** command list ** threads [threadgroup] -- list threads thread
Many other debuggers are available; a look in the current Java magazines will inform
you of them. Many of them work remotely since the Java Debugger API (that which
the debuggers use) is network-based.
No comments:
Post a Comment