jdb - Unix, Linux Command
jdb - Java debugger
options ] [
class ] [
Name of the class to begin debugging.
Arguments passed to the
main() method of
The Java debugger,
jdb, is a simple command-line debugger for
It is a demonstration of the
Java Platform Debugger Architecture that provides inspection and debugging of a local or remote Java
Starting a jdb Session
There are many ways to start a
The most frequently used way is to have
jdb launch a new Java Virtual Machine (VM)
with the main class of the application to be debugged.
This is done by substituting the command
in the command line.
if your applications main class is
MyClass, you use the following command to debug it under
example% jdb MyClass
When started this way,
jdb invokes a second Java VM with any specified parameters,
loads the specified class,
and stops the VM before executing that classs first instruction.
Another way to use
jdb is by attaching it to a Java VM that is already running.
A VM that is to be
jdb must be started with the following options:
|-Xdebug||Enables debugging support in the VM.|
||Loads in-process debugging libraries and
specifies the kind of connection to be made.
For example, the following command
will run the
MyClass application and allow
jdb to connect to it at a later time:
example% java -Xdebug \
You can then attach
jdb to the VM with the following command:
example% jdb -attach 8000
MyClass is not specified in the
jdb command line in this case because
jdb is connecting to an existing VM instead of launching a new one.
There are many other ways to connect the
debugger to a VM,
and all of them are supported by
jdb. The Java Platform Debugger Architecture has
additional documentation on these connection options.
Basic jdb Commands
The following is a list of the basic
The Java debugger supports other commands listed with the
Notice that to display local (stack) variables, the class
must have been compiled with the
javac -g option.
Continues execution of
the debugged application after a breakpoint,
exception, or step.
For primitive values, this command is identical to
print. For objects, it prints the
current value of each field defined in the object.
Static and instance fields are included.
dump command supports the same set of expressions as the
help, or ? ||
As the most important
help displays the
list of recognized commands with a brief
Displays Java objects and primitive values.
For variables or fields of primitive types,
the actual value is printed.
For objects, a short description is printed.
dump command for
getting more information about an object.
print supports many simple Java expressions
including those with method
print MyClass.myStaticField |
print myObj.myInstanceField |
print i + j + k ... where
i, j, and
k are primitives and either fields or local variables.
print myObj.myMethod() ... if
myMethod returns a non-null.
print new java.lang.String( Hello ).length() |
Selects a thread to be the current thread.
jdb commands are based on the
setting of the current thread.
The thread is specified with the thread index
described in the
threads command. |
Lists the threads
that are currently running.
For each thread, its name and current
status are printed,
as well as an index that can be used for other commands.
4. (java.lang.Thread)0x1 main running |
In this example, the thread index is
4, the thread is an instance of
java.lang.Thread, the thread name is
main, and it is currently running
jdb, and setting any necessary breakpoints,
use this command to start the
execution of the debugged application.
This command is available only when
jdb launches the debugged application (as opposed to
attaching to an existing VM).
where subcommand with no arguments dumps the stack of the
current thread (which is set with the
where all dumps the stack of all threads
in the current thread group.
where threadindex dumps the stack of the specified thread.
If the current thread
is suspended (either through an event such as a
breakpoint or through the
suspend command), local variables
and fields can be displayed with the
down commands select which stack frame is current.
Breakpoints are set in
jdb at line numbers or at the first instruction of a method.
If a method is overloaded,
you must also specify its argument types so that the proper
method can be selected for a breakpoint.
stop at MyClass:22 ||
Sets a breakpoint at the first instruction for line
22 of the source file containing
stop in java.lang.String.length |
Sets a breakpoint at the beginning of the method
stop in MyClass.init ||
init identifies the
stop in MyClass.clinit ||
clinit identifies the static initialization code for
clear command removes breakpoints using a syntax as in
clearMyClass:45. Using the
clear command with no argument displays a list of all breakpoints
cont command continues execution.
step command advances execution to
the next line,
whether it is in the current
stack frame or a called method.
next command advances execution to the next line
in the current stack frame.
When an exception occurs for which there is no catch
statement anywhere in the
throwing threads call stack,
the VM normally prints an exception trace and exits.
When running under
jdb, however, control returns to
jdb at the offending throw.
jdb to determine the cause of the exception.
Causes the debugged application to stop at other thrown exceptions.
catch java.io.FileNotFoundException |
catch mypackage.BigTroubleException |
Any exception which is an instance of the specified
class (or of a subclass) will stop the
application at the point where it is thrown.
Negates the effect of a previous
Notice that the
ignore command does not cause the debugged VM
to ignore specific exceptions, only the
jdb in place of the Java application launcher on the command
jdb accepts many of the same options as the
-D, -classpath, and
The following additional options are accepted by
Other options are supported for
alternate mechanisms for connecting the debugger and the VM
it is to debug.
The Java Platform Debugger Architecture has
additional documentation on these
-sourcepath dir1:dir2:... |
Uses the given path in searching for source files
in the specified path.
If this option is not
specified, the default path of "." is used.
-attach address ||
Attaches the debugger to
previously running VM using the default connection mechanism.
Launches the debugged application
immediately upon startup of
jdb. This option removes the need
for using the
The debuged application is launched and then
stopped just before the initial application class is loaded.
At that point, you can set any
necessary breakpoints and use the
cont command to continue execution.
-J option ||
option to the Java virtual machine, where
option is one of the options described on the man page for the
java application launcher, java(1). For example,
-J-Xms48m sets the startup memory to 48 megabytes. It is a common convention for
-J to pass options to the underlying virtual machine.