rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 1 | '\" t |
| 2 | .\" Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. |
| 3 | .\"
|
| 4 | .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
| 5 | .\"
|
| 6 | .\" This code is free software; you can redistribute it and/or modify it
|
| 7 | .\" under the terms of the GNU General Public License version 2 only, as
|
| 8 | .\" published by the Free Software Foundation.
|
| 9 | .\"
|
| 10 | .\" This code is distributed in the hope that it will be useful, but WITHOUT
|
| 11 | .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
| 12 | .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
| 13 | .\" version 2 for more details (a copy is included in the LICENSE file that
|
| 14 | .\" accompanied this code).
|
| 15 | .\"
|
| 16 | .\" You should have received a copy of the GNU General Public License version
|
| 17 | .\" 2 along with this work; if not, write to the Free Software Foundation,
|
| 18 | .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
| 19 | .\"
|
| 20 | .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
| 21 | .\" or visit www.oracle.com if you need additional information or have any
|
| 22 | .\" questions.
|
| 23 | .\"
|
| 24 | .\" Arch: generic |
| 25 | .\" Software: JDK 8 |
| 26 | .\" Date: 21 November 2013 |
| 27 | .\" SectDesc: Basic Tools |
| 28 | .\" Title: jdb.1 |
| 29 | .\" |
| 30 | .if n .pl 99999 |
| 31 | .TH jdb 1 "21 November 2013" "JDK 8" "Basic Tools" |
| 32 | .\" -----------------------------------------------------------------
|
| 33 | .\" * Define some portability stuff
|
| 34 | .\" -----------------------------------------------------------------
|
| 35 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| 36 | .\" http://bugs.debian.org/507673
|
| 37 | .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
|
| 38 | .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| 39 | .ie \n(.g .ds Aq \(aq
|
| 40 | .el .ds Aq '
|
| 41 | .\" -----------------------------------------------------------------
|
| 42 | .\" * set default formatting
|
| 43 | .\" -----------------------------------------------------------------
|
| 44 | .\" disable hyphenation
|
| 45 | .nh
|
| 46 | .\" disable justification (adjust text to left margin only)
|
| 47 | .ad l
|
| 48 | .\" -----------------------------------------------------------------
|
| 49 | .\" * MAIN CONTENT STARTS HERE *
|
| 50 | .\" -----------------------------------------------------------------
|
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 51 | |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 52 | .SH NAME |
| 53 | jdb \- Finds and fixes bugs in Java platform programs\&. |
| 54 | .SH SYNOPSIS |
| 55 | .sp |
| 56 | .nf |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 57 | |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 58 | \fBjdb\fR [\fIoptions\fR] [\fIclassname\fR] [\fIarguments\fR] |
| 59 | .fi |
| 60 | .sp |
| 61 | .TP |
| 62 | \fIoptions\fR |
| 63 | Command-line options\&. See Options\&. |
| 64 | .TP |
| 65 | \fIclass\fRname |
| 66 | Name of the main class to debug\&. |
| 67 | .TP |
| 68 | \fIarguments\fR |
| 69 | Arguments passed to the \f3main()\fR method of the class\&. |
| 70 | .SH DESCRIPTION |
| 71 | The Java Debugger (JDB) is a simple command-line debugger for Java classes\&. The \f3jdb\fR command and its options call the JDB\&. The \f3jdb\fR command demonstrates the Java Platform Debugger Architecture (JDBA) and provides inspection and debugging of a local or remote Java Virtual Machine (JVM)\&. See Java Platform Debugger Architecture (JDBA) at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html |
| 72 | .SS START\ A\ JDB\ SESSION |
| 73 | There are many ways to start a JDB session\&. The most frequently used way is to have JDB launch a new JVM with the main class of the application to be debugged\&. Do this by substituting the \f3jdb\fR command for the \f3java\fR command in the command line\&. For example, if your application\&'s main class is \f3MyClass\fR, then use the following command to debug it under JDB: |
| 74 | .sp |
| 75 | .nf |
| 76 | \f3jdb MyClass\fP |
| 77 | .fi |
| 78 | .nf |
| 79 | \f3\fP |
| 80 | .fi |
| 81 | .sp |
| 82 | When started this way, the \f3jdb\fR command calls a second JVM with the specified parameters, loads the specified class, and stops the JVM before executing that class\&'s first instruction\&. |
| 83 | .PP |
| 84 | Another way to use the \f3jdb\fR command is by attaching it to a JVM that is already running\&. Syntax for starting a JVM to which the \f3jdb\fR command attaches when the JVM is running is as follows\&. This loads in-process debugging libraries and specifies the kind of connection to be made\&. |
| 85 | .sp |
| 86 | .nf |
| 87 | \f3java \-agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass\fP |
| 88 | .fi |
| 89 | .nf |
| 90 | \f3\fP |
| 91 | .fi |
| 92 | .sp |
| 93 | You can then attach the \f3jdb\fR command to the JVM with the following command: |
| 94 | .sp |
| 95 | .nf |
| 96 | \f3jdb \-attach 8000\fP |
| 97 | .fi |
| 98 | .nf |
| 99 | \f3\fP |
| 100 | .fi |
| 101 | .sp |
| 102 | The \f3MyClass\fR argument is not specified in the \f3jdb\fR command line in this case because the \f3jdb\fR command is connecting to an existing JVM instead of launching a new JVM\&. |
| 103 | .PP |
| 104 | There are many other ways to connect the debugger to a JVM, and all of them are supported by the \f3jdb\fR command\&. The Java Platform Debugger Architecture has additional documentation on these connection options\&. |
| 105 | .SS BASIC\ JDB\ COMMANDS |
| 106 | The following is a list of the basic \f3jdb\fR commands\&. The JDB supports other commands that you can list with the \f3-help\fR option\&. |
| 107 | .TP |
| 108 | help or ? |
| 109 | The \f3help\fR or \f3?\fR commands display the list of recognized commands with a brief description\&. |
| 110 | .TP |
| 111 | run |
| 112 | After you start JDB and set breakpoints, you can use the \f3run\fR command to execute the debugged application\&. The \f3run\fR command is available only when the \f3jdb\fR command starts the debugged application as opposed to attaching to an existing JVM\&. |
| 113 | .TP |
| 114 | cont |
| 115 | Continues execution of the debugged application after a breakpoint, exception, or step\&. |
| 116 | .TP |
| 117 | print |
| 118 | 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 dump command to find out how to get more information about an object\&. |
tbell | 16c34dd | 2009-05-04 18:28:26 -0700 | [diff] [blame] | 119 | |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 120 | \fINote:\fR To display local variables, the containing class must have been compiled with the \f3javac -g\fR option\&. |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 121 | |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 122 | The \f3print\fR command supports many simple Java expressions including those with method invocations, for example: |
| 123 | .sp |
| 124 | .nf |
| 125 | \f3print MyClass\&.myStaticField\fP |
| 126 | .fi |
| 127 | .nf |
| 128 | \f3print myObj\&.myInstanceField\fP |
| 129 | .fi |
| 130 | .nf |
| 131 | \f3print i + j + k (i, j, k are primities and either fields or local variables)\fP |
| 132 | .fi |
| 133 | .nf |
| 134 | \f3print myObj\&.myMethod() (if myMethod returns a non\-null)\fP |
| 135 | .fi |
| 136 | .nf |
| 137 | \f3print new java\&.lang\&.String("Hello")\&.length()\fP |
| 138 | .fi |
| 139 | .nf |
| 140 | \f3\fP |
| 141 | .fi |
| 142 | .sp |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 143 | |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 144 | .TP |
| 145 | dump |
| 146 | For primitive values, the \f3dump\fR command is identical to the \f3print\fR command\&. For objects, the \f3dump\fR command prints the current value of each field defined in the object\&. Static and instance fields are included\&. The \f3dump\fR command supports the same set of expressions as the \f3print\fR command\&. |
| 147 | .TP |
| 148 | threads |
| 149 | List the threads that are currently running\&. For each thread, its name and current status are printed and an index that can be used in other commands\&. In this example, the thread index is 4, the thread is an instance of \f3java\&.lang\&.Thread\fR, the thread name is \f3main\fR, and it is currently running\&. |
| 150 | .sp |
| 151 | .nf |
| 152 | \f34\&. (java\&.lang\&.Thread)0x1 main running\fP |
| 153 | .fi |
| 154 | .nf |
| 155 | \f3\fP |
| 156 | .fi |
| 157 | .sp |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 158 | |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 159 | .TP |
| 160 | thread |
| 161 | Select a thread to be the current thread\&. Many \f3jdb\fR commands are based on the setting of the current thread\&. The thread is specified with the thread index described in the threads command\&. |
| 162 | .TP |
| 163 | where |
| 164 | The \f3where\fR command with no arguments dumps the stack of the current thread\&. The \f3where\fR\f3all\fR command dumps the stack of all threads in the current thread group\&. The \f3where\fR\f3threadindex\fR command dumps the stack of the specified thread\&. |
duke | 6e45e10 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 165 | |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 166 | If the current thread is suspended either through an event such as a breakpoint or through the \f3suspend\fR command, then local variables and fields can be displayed with the \f3print\fR and \f3dump\fR commands\&. The \f3up\fR and \f3down\fR commands select which stack frame is the current stack frame\&. |
| 167 | .SS BREAKPOINTS |
| 168 | Breakpoints can be set in JDB at line numbers or at the first instruction of a method, for example: |
| 169 | .TP 0.2i |
| 170 | \(bu |
| 171 | The command \f3stop at MyClass:22\fR sets a breakpoint at the first instruction for line 22 of the source file containing \f3MyClass\fR\&. |
| 172 | .TP 0.2i |
| 173 | \(bu |
| 174 | The command \f3stop in java\&.lang\&.String\&.length\fR sets a breakpoint at the beginning of the method \f3java\&.lang\&.String\&.length\fR\&. |
| 175 | .TP 0.2i |
| 176 | \(bu |
| 177 | The command \f3stop in MyClass\&.<clinit>\fR uses \f3<clinit>\fR to identify the static initialization code for \f3MyClass\fR\&. |
| 178 | .PP |
| 179 | When a method is overloaded, you must also specify its argument types so that the proper method can be selected for a breakpoint\&. For example, \f3MyClass\&.myMethod(int,java\&.lang\&.String)\fR or \f3MyClass\&.myMethod()\fR\&. |
| 180 | .PP |
| 181 | The \f3clear\fR command removes breakpoints using the following syntax: \f3clear MyClass:45\fR\&. Using the \f3clear\fR or \f3stop\fR command with no argument displays a list of all breakpoints currently set\&. The \f3cont\fR command continues execution\&. |
| 182 | .SS STEPPING |
| 183 | The \f3step\fR command advances execution to the next line whether it is in the current stack frame or a called method\&. The \f3next\fR command advances execution to the next line in the current stack frame\&. |
| 184 | .SS EXCEPTIONS |
| 185 | When an exception occurs for which there is not a \f3catch\fR statement anywhere in the throwing thread\&'s call stack, the JVM typically prints an exception trace and exits\&. When running under JDB, however, control returns to JDB at the offending throw\&. You can then use the \f3jdb\fR command to diagnose the cause of the exception\&. |
| 186 | .PP |
| 187 | Use the \f3catch\fR command to cause the debugged application to stop at other thrown exceptions, for example: \f3catch java\&.io\&.FileNotFoundException\fR or \f3catch\fR\f3mypackage\&.BigTroubleException\fR\&. Any exception that is an instance of the specified class or subclass stops the application at the point where it is thrown\&. |
| 188 | .PP |
| 189 | The \f3ignore\fR command negates the effect of an earlier \f3catch\fR command\&. The \f3ignore\fR command does not cause the debugged JVM to ignore specific exceptions, but only to ignore the debugger\&. |
| 190 | .SH OPTIONS |
| 191 | When you use the \f3jdb\fR command instead of the \f3java\fR command on the command line, the \f3jdb\fR command accepts many of the same options as the \f3java\fR command, including \f3-D\fR, \f3-classpath\fR, and \f3-X\fR options\&. The following list contains additional options that are accepted by the \f3jdb\fR command\&. |
| 192 | .PP |
| 193 | Other options are supported to provide alternate mechanisms for connecting the debugger to the JVM it is to debug\&. For additional documentation about these connection alternatives, see Java Platform Debugger Architecture (JPDA) at http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html |
| 194 | .TP |
| 195 | -help |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 196 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 197 | Displays a help message\&. |
| 198 | .TP |
| 199 | -sourcepath \fIdir1:dir2: \&. \&. \&.\fR |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 200 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 201 | Uses the specified path to search for source files in the specified path\&. If this option is not specified, then use the default path of dot (\&.)\&. |
| 202 | .TP |
| 203 | -attach \fIaddress\fR |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 204 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 205 | Attaches the debugger to a running JVM with the default connection mechanism\&. |
| 206 | .TP |
| 207 | -listen \fIaddress\fR |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 208 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 209 | Waits for a running JVM to connect to the specified address with a standard connector\&. |
| 210 | .TP |
| 211 | -launch |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 212 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 213 | Starts the debugged application immediately upon startup of JDB\&. The \f3-launch\fR option removes the need for the \f3run\fR command\&. The debugged 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 \f3cont\fR command to continue execution\&. |
| 214 | .TP |
| 215 | -listconnectors |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 216 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 217 | List the connectors available in this JVM\&. |
| 218 | .TP |
| 219 | -connect connector-name:\fIname1=value1\fR |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 220 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 221 | Connects to the target JVM with the named connector and listed argument values\&. |
| 222 | .TP |
| 223 | -dbgtrace [\fIflags\fR] |
bpatel | 4bf512b | 2011-05-11 08:30:46 -0700 | [diff] [blame] | 224 | .br |
rgallard | b643545 | 2013-11-25 20:19:02 -0800 | [diff] [blame] | 225 | Prints information for debugging the \f3jdb\fR command\&. |
| 226 | .TP |
| 227 | -tclient |
| 228 | .br |
| 229 | Runs the application in the Java HotSpot VM client\&. |
| 230 | .TP |
| 231 | -tserver |
| 232 | .br |
| 233 | Runs the application in the Java HotSpot VM server\&. |
| 234 | .TP |
| 235 | -J\fIoption\fR |
| 236 | .br |
| 237 | Passes \f3option\fR to the JVM, where option is one of the options described on the reference page for the Java application launcher\&. For example, \f3-J-Xms48m\fR sets the startup memory to 48 MB\&. See java(1)\&. |
| 238 | .SH OPTIONS\ FORWARDED\ TO\ THE\ DEBUGGER\ PROCESS |
| 239 | .TP |
| 240 | -v -verbose[:\fIclass\fR|gc|jni] |
| 241 | .br |
| 242 | Turns on verbose mode\&. |
| 243 | .TP |
| 244 | -D\fIname\fR=\fIvalue\fR |
| 245 | .br |
| 246 | Sets a system property\&. |
| 247 | .TP |
| 248 | -classpath \fIdir\fR |
| 249 | .br |
| 250 | Lists directories separated by colons in which to look for classes\&. |
| 251 | .TP |
| 252 | -X\fIoption\fR |
| 253 | .br |
| 254 | Nonstandard target JVM option\&. |
| 255 | .SH SEE\ ALSO |
| 256 | .TP 0.2i |
| 257 | \(bu |
| 258 | javac(1) |
| 259 | .TP 0.2i |
| 260 | \(bu |
| 261 | java(1) |
| 262 | .TP 0.2i |
| 263 | \(bu |
| 264 | javah(1) |
| 265 | .TP 0.2i |
| 266 | \(bu |
| 267 | javap(1) |
| 268 | .RE
|
| 269 | .br
|
| 270 | 'pl 8.5i
|
| 271 | 'bp
|