." Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH jdb 1 "04 May 2009"
." Generated from HTML by html2man (author: Eric Armstrong)

.LP
.SH "Name"
jdb \- The Java Debugger
.LP
.RS 3

.LP
.LP
\f3jdb\fP helps you find and fix bugs in Java language programs.
.LP
.RE
.SH "SYNOPSIS"
.LP

.LP
.nf
\f3
.fl
\fP\f3jdb\fP [ options ] [ class ] [ arguments ] 
.fl
.fi

.LP
.RS 3

.LP
.RS 3
.TP 3
options 
Command\-line options, as specified below. 
.TP 3
class 
Name of the class to begin debugging. 
.TP 3
arguments 
Arguments passed to the \f2main()\fP method of \f2class\fP. 
.RE

.LP
.RE
.SH "DESCRIPTION"
.LP

.LP
.LP
The Java Debugger, \f3jdb\fP, is a simple command\-line debugger for Java classes. It is a demonstration of the 
.na
\f2Java Platform Debugger Architecture\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/jpda/index.html that provides inspection and debugging of a local or remote Java Virtual Machine.
.LP
.SS 
Starting a jdb Session
.LP
.RS 3

.LP
.LP
There are many ways to start a jdb session. The most frequently used way is to have \f3jdb\fP launch a new Java Virtual Machine (VM) with the main class of the application to be debugged. This is done by substituting the command \f3jdb\fP for \f3java\fP in the command line. For example, if your application's main class is MyClass, you use the following command to debug it under JDB:
.LP
.nf
\f3
.fl
 % jdb MyClass 
.fl
\fP
.fi

.LP
.LP
When started this way, \f3jdb\fP invokes a second Java VM with any specified parameters, loads the specified class, and stops the VM before executing that class's first instruction.
.LP
.LP
Another way to use \f3jdb\fP is by attaching it to a Java VM that is already running. Syntax for Starting a VM to which jdb will attach when the VM is running is as follows. This loads in\-process debugging libraries and specifies the kind of connection to be made.
.LP
.nf
\f3
.fl
\-agentlib:jdwp=transport=dt_socket,server=y,suspend=n
.fl
\fP
.fi

.LP
.LP
For example, the following command will run the MyClass application, and allow \f3jdb\fP to connect to it at a later time.
.LP
.nf
\f3
.fl
 % java \-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n MyClass
.fl
\fP
.fi

.LP
.LP
You can then attach \f3jdb\fP to the VM with the following commmand:
.LP
.nf
\f3
.fl
 % jdb \-attach 8000 
.fl
\fP
.fi

.LP
.LP
Note that "MyClass" is not specified in the \f3jdb\fP command line in this case because \f3jdb\fP is connecting to an existing VM instead of launching a new one.
.LP
.LP
There are many other ways to connect the debugger to a VM, and all of them are supported by \f3jdb\fP. The Java Platform Debugger Architecture has additional 
.na
\f2documentation\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.html on these connection options. For information on starting a J2SE 1.4.2 or early VM for use with \f3jdb\fP see the 
.na
\f21.4.2 documentation\fP @
.fi
http://java.sun.com/j2se/1.4.2/docs/guide/jpda/conninv.html
.LP
.SS 
Basic jdb Commands
.LP
.LP
The following is a list of the basic \f3jdb\fP commands. The Java debugger supports other commands which you can list using \f3jdb\fP's \f2help\fP command.
.LP
.RS 3

.LP
.RS 3
.TP 3
help, or ? 
The most important \f3jdb\fP command, \f2help\fP displays the list of recognized commands with a brief description. 
.TP 3
run 
After starting \f3jdb\fP, and setting any necessary breakpoints, you can use this command to start the execution the debugged application. This command is available only when \f3jdb\fP launches the debugged application (as opposed to attaching to an existing VM). 
.TP 3
cont 
Continues execution of the debugged application after a breakpoint, exception, or step. 
.TP 3
print 
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. See the \f2dump\fP command below for getting more information about an object. 
.LP
\f2NOTE: To display local variables, the containing class must have been compiled with the \fP\f2javac(1)\fP\f2 \fP\f2\-g\fP option. 
.LP
\f2print\fP supports many simple Java expressions including those with method invocations, for example: 
.RS 3
.TP 2
o
\f2print MyClass.myStaticField\fP 
.TP 2
o
\f2print myObj.myInstanceField\fP 
.TP 2
o
\f2print i + j + k\fP \f2(i, j, k are primities and either fields or local variables)\fP 
.TP 2
o
\f2print myObj.myMethod()\fP \f2(if myMethod returns a non\-null)\fP 
.TP 2
o
\f2print new java.lang.String("Hello").length()\fP 
.RE
.TP 3
dump 
For primitive values, this command is identical to \f2print\fP. For objects, it prints the current value of each field defined in the object. Static and instance fields are included. 
.LP
The \f2dump\fP command supports the same set of expressions as the \f2print\fP command.  
.TP 3
threads 
List 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, for example: 
.RS 3

.LP
.nf
\f3
.fl
4. (java.lang.Thread)0x1 main      running
.fl
\fP
.fi
.RE
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, 
.TP 3
thread 
Select a thread to be the current thread. Many \f3jdb\fP commands are based on the setting of the current thread. The thread is specified with the thread index described in the \f2threads\fP command above. 
.TP 3
where 
\f2where\fP with no arguments dumps the stack of the current thread. \f2where all\fP dumps the stack of all threads in the current thread group. \f2where\fP \f2threadindex\fP dumps the stack of the specified thread. 
.LP
If the current thread is suspended (either through an event such as a breakpoint or through the \f2suspend\fP command), local variables and fields can be displayed with the \f2print\fP and \f2dump\fP commands. The \f2up\fP and \f2down\fP commands select which stack frame is current.  
.RE

.LP
.RE
.SS 
Breakpoints
.LP
.RS 3

.LP
.LP
Breakpoints can be set in \f3jdb\fP at line numbers or at the first instruction of a method, for example:
.LP
.RS 3
.TP 2
o
\f2stop at MyClass:22\fP \f2(sets a breakpoint at the first instruction for line 22 of the source file containing MyClass)\fP 
.TP 2
o
\f2stop in java.lang.String.length\fP \f2(sets a breakpoint at the beginnig of the method \fP\f2java.lang.String.length\fP) 
.TP 2
o
\f2stop in MyClass.<init>\fP \f2(<init> identifies the MyClass constructor)\fP 
.TP 2
o
\f2stop in MyClass.<clinit>\fP \f2(<clinit> identifies the static initialization code for MyClass)\fP 
.RE

.LP
.LP
If a method is overloaded, you must also specify its argument types so that the proper method can be selected for a breakpoint. For example, "\f2MyClass.myMethod(int,java.lang.String)\fP", or "\f2MyClass.myMethod()\fP".
.LP
.LP
The \f2clear\fP command removes breakpoints using a syntax as in "\f2clear\ MyClass:45\fP". Using the \f2clear\fP or command with no argument displays a list of all breakpoints currently set. The \f2cont\fP command continues execution.
.LP
.RE
.SS 
Stepping
.LP
.RS 3

.LP
.LP
The \f2step\fP commands advances execution to the next line whether it is in the current stack frame or a called method. The \f2next\fP command advances execution to the next line in the current stack frame.
.LP
.RE
.SS 
Exceptions
.LP
.RS 3

.LP
.LP
When an exception occurs for which there isn't a catch statement anywhere in the throwing thread's call stack, the VM normally prints an exception trace and exits. When running under \f3jdb\fP, however, control returns to \f3jdb\fP at the offending throw. You can then use \f3jdb\fP to diagnose the cause of the exception.
.LP
.LP
Use the \f2catch\fP command to cause the debugged application to stop at other thrown exceptions, for example: "\f2catch java.io.FileNotFoundException\fP" or "\f2catch mypackage.BigTroubleException\fP. Any exception which is an instance of the specifield class (or of a subclass) will stop the application at the point where it is thrown.
.LP
.LP
The \f2ignore\fP command negates the effect of a previous \f2catch\fP command.
.LP
.LP
\f2NOTE: The \fP\f2ignore\fP command does not cause the debugged VM to ignore specific exceptions, only the debugger.
.LP
.RE
.RE
.SH "Command Line Options"
.LP

.LP
.LP
When you use \f3jdb\fP in place of the Java application launcher on the command line, \f3jdb\fP accepts many of the same options as the java command, including \f2\-D\fP, \f2\-classpath\fP, and \f2\-X<option>\fP.
.LP
.LP
The following additional options are accepted by \f3jdb\fP:
.LP
.RS 3
.TP 3
\-help 
Displays a help message. 
.TP 3
\-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. 
.TP 3
\-attach <address> 
Attaches the debugger to previously running VM using the default connection mechanism. 
.TP 3
\-listen <address> 
Waits for a running VM to connect at the specified address using standard connector. 
.TP 3
\-listenany 
Waits for a running VM to connect at any available address using standard connector. 
.TP 3
\-launch 
Launches the debugged application immediately upon startup of jdb. This option removes the need for using the \f2run\fP command. 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 \f2cont\fP to continue execution. 
.TP 3
\-listconnectors 
List the connectors available in this VM 
.TP 3
\-connect <connector\-name>:<name1>=<value1>,... 
Connects to target VM using named connector with listed argument values. 
.TP 3
\-dbgtrace [flags] 
Prints info for debugging jdb. 
.TP 3
\-tclient 
Runs the application in the Java HotSpot(tm) VM (Client). 
.TP 3
\-tserver 
Runs the application in the Java HotSpot(tm) VM (Server). 
.TP 3
\-Joption 
Pass \f2option\fP to the Java virtual machine used to run jdb. (Options for the application Java virtual machine are passed to the \f3run\fP command.) For example, \f3\-J\-Xms48m\fP sets the startup memory to 48 megabytes. 
.RE

.LP
.LP
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 
.na
\f2documentation\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.html on these connection alternatives.
.LP
.SS 
Options Forwarded to Debuggee Process
.LP
.RS 3
.TP 3
\-v \-verbose[:class|gc|jni] 
Turns on verbose mode. 
.TP 3
\-D<name>=<value> 
Sets a system property. 
.TP 3
\-classpath <directories separated by ":"> 
Lists directories in which to look for classes. 
.TP 3
\-X<option> 
Non\-standard target VM option 
.RE

.LP
.SH "SEE ALSO"
.LP

.LP
.LP
javac(1), java(1), javah(1), javap(1), javadoc(1).
.LP

.LP
 
