| .\" Copyright (c) 1995, 2023, Oracle and/or its affiliates. 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. |
| .\" |
| .\" Automatically generated by Pandoc 2.19.2 |
| .\" |
| .\" Define V font for inline verbatim, using C font in formats |
| .\" that render this, and otherwise B font. |
| .ie "\f[CB]x\f[R]"x" \{\ |
| . ftr V B |
| . ftr VI BI |
| . ftr VB B |
| . ftr VBI BI |
| .\} |
| .el \{\ |
| . ftr V CR |
| . ftr VI CI |
| . ftr VB CB |
| . ftr VBI CBI |
| .\} |
| .TH "JDB" "1" "2023" "JDK 21" "JDK Commands" |
| .hy |
| .SH NAME |
| .PP |
| jdb - find and fix bugs in Java platform programs |
| .SH SYNOPSIS |
| .PP |
| \f[V]jdb\f[R] [\f[I]options\f[R]] [\f[I]classname\f[R]] |
| [\f[I]arguments\f[R]] |
| .TP |
| \f[I]options\f[R] |
| This represents the \f[V]jdb\f[R] command-line options. |
| See \f[B]Options for the jdb command\f[R]. |
| .TP |
| \f[I]classname\f[R] |
| This represents the name of the main class to debug. |
| .TP |
| \f[I]arguments\f[R] |
| This represents the arguments that are passed to the \f[V]main()\f[R] |
| method of the class. |
| .SH DESCRIPTION |
| .PP |
| The Java Debugger (JDB) is a simple command-line debugger for Java |
| classes. |
| The \f[V]jdb\f[R] command and its options call the JDB. |
| The \f[V]jdb\f[R] command demonstrates the Java Platform Debugger |
| Architecture and provides inspection and debugging of a local or remote |
| JVM. |
| .SH START A JDB SESSION |
| .PP |
| There are many ways to start a JDB session. |
| The most frequently used way is to have the JDB launch a new JVM with |
| the main class of the application to be debugged. |
| Do this by substituting the \f[V]jdb\f[R] command for the \f[V]java\f[R] |
| command in the command line. |
| For example, if your application\[aq]s main class is \f[V]MyClass\f[R], |
| then use the following command to debug it under the JDB: |
| .RS |
| .PP |
| \f[V]jdb MyClass\f[R] |
| .RE |
| .PP |
| When started this way, the \f[V]jdb\f[R] command calls a second JVM with |
| the specified parameters, loads the specified class, and stops the JVM |
| before executing that class\[aq]s first instruction. |
| .PP |
| Another way to use the \f[V]jdb\f[R] command is by attaching it to a JVM |
| that\[aq]s already running. |
| Syntax for starting a JVM to which the \f[V]jdb\f[R] 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. |
| .RS |
| .PP |
| \f[V]java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass\f[R] |
| .RE |
| .PP |
| You can then attach the \f[V]jdb\f[R] command to the JVM with the |
| following command: |
| .RS |
| .PP |
| \f[V]jdb -attach 8000\f[R] |
| .RE |
| .PP |
| 8000 is the address of the running JVM. |
| .PP |
| The \f[V]MyClass\f[R] argument isn\[aq]t specified in the \f[V]jdb\f[R] |
| command line in this case because the \f[V]jdb\f[R] command is |
| connecting to an existing JVM instead of launching a new JVM. |
| .PP |
| There are many other ways to connect the debugger to a JVM, and all of |
| them are supported by the \f[V]jdb\f[R] command. |
| The Java Platform Debugger Architecture has additional documentation on |
| these connection options. |
| .SH BREAKPOINTS |
| .PP |
| Breakpoints can be set in the JDB at line numbers or at the first |
| instruction of a method, for example: |
| .IP \[bu] 2 |
| The command \f[V]stop at MyClass:22\f[R] sets a breakpoint at the first |
| instruction for line 22 of the source file containing \f[V]MyClass\f[R]. |
| .IP \[bu] 2 |
| The command \f[V]stop in java.lang.String.length\f[R] sets a breakpoint |
| at the beginning of the method \f[V]java.lang.String.length\f[R]. |
| .IP \[bu] 2 |
| The command \f[V]stop in MyClass.<clinit>\f[R] uses \f[V]<clinit>\f[R] |
| to identify the static initialization code for \f[V]MyClass\f[R]. |
| .PP |
| 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, \f[V]MyClass.myMethod(int,java.lang.String)\f[R] or |
| \f[V]MyClass.myMethod()\f[R]. |
| .PP |
| The \f[V]clear\f[R] command removes breakpoints using the following |
| syntax: \f[V]clear MyClass:45\f[R]. |
| Using the \f[V]clear\f[R] or \f[V]stop\f[R] command with no argument |
| displays a list of all breakpoints currently set. |
| The \f[V]cont\f[R] command continues execution. |
| .SH STEPPING |
| .PP |
| The \f[V]step\f[R] command advances execution to the next line whether |
| it\[aq]s in the current stack frame or a called method. |
| The \f[V]next\f[R] command advances execution to the next line in the |
| current stack frame. |
| .SH EXCEPTIONS |
| .PP |
| When an exception occurs for which there isn\[aq]t a \f[V]catch\f[R] |
| statement anywhere in the throwing thread\[aq]s call stack, the JVM |
| typically prints an exception trace and exits. |
| When running under the JDB, however, control returns to the JDB at the |
| offending throw. |
| You can then use the \f[V]jdb\f[R] command to diagnose the cause of the |
| exception. |
| .PP |
| Use the \f[V]catch\f[R] command to cause the debugged application to |
| stop at other thrown exceptions, for example: |
| \f[V]catch java.io.FileNotFoundException\f[R] or \f[V]catch\f[R] |
| \f[V]mypackage.BigTroubleException\f[R]. |
| Any exception that\[aq]s an instance of the specified class or subclass |
| stops the application at the point where the exception is thrown. |
| .PP |
| The \f[V]ignore\f[R] command negates the effect of an earlier |
| \f[V]catch\f[R] command. |
| The \f[V]ignore\f[R] command doesn\[aq]t cause the debugged JVM to |
| ignore specific exceptions, but only to ignore the debugger. |
| .SH OPTIONS FOR THE JDB COMMAND |
| .PP |
| When you use the \f[V]jdb\f[R] command instead of the \f[V]java\f[R] |
| command on the command line, the \f[V]jdb\f[R] command accepts many of |
| the same options as the \f[V]java\f[R] command. |
| .PP |
| The following options are accepted by the \f[V]jdb\f[R] command: |
| .TP |
| \f[V]-help\f[R] |
| Displays a help message. |
| .TP |
| \f[V]-sourcepath\f[R] \f[I]dir1\f[R]\f[V]:\f[R]\f[I]dir2\f[R]\f[V]:\f[R]... |
| 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 |
| (\f[V].\f[R]). |
| .TP |
| \f[V]-attach\f[R] \f[I]address\f[R] |
| Attaches the debugger to a running JVM with the default connection |
| mechanism. |
| .TP |
| \f[V]-listen\f[R] \f[I]address\f[R] |
| Waits for a running JVM to connect to the specified address with a |
| standard connector. |
| .TP |
| \f[V]-listenany\f[R] |
| Waits for a running JVM to connect at any available address using a |
| standard connector. |
| .TP |
| \f[V]-launch\f[R] |
| Starts the debugged application immediately upon startup of the |
| \f[V]jdb\f[R] command. |
| The \f[V]-launch\f[R] option removes the need for the \f[V]run\f[R] |
| 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 |
| \f[V]cont\f[R] command to continue execution. |
| .TP |
| \f[V]-listconnectors\f[R] |
| Lists the connectors available in this JVM. |
| .TP |
| \f[V]-connect\f[R] \f[I]connector-name\f[R]\f[V]:\f[R]\f[I]name1\f[R]\f[V]=\f[R]\f[I]value1\f[R].... |
| Connects to the target JVM with the named connector and listed argument |
| values. |
| .TP |
| \f[V]-dbgtrace\f[R] [\f[I]flags\f[R]] |
| Prints information for debugging the \f[V]jdb\f[R] command. |
| .TP |
| \f[V]-tclient\f[R] |
| Runs the application in the Java HotSpot VM client. |
| .TP |
| \f[V]-trackallthreads\f[R] |
| Track all threads as they are created, including virtual threads. |
| See \f[B]Working With Virtual Threads\f[R] below. |
| .TP |
| \f[V]-tserver\f[R] |
| Runs the application in the Java HotSpot VM server. |
| .TP |
| \f[V]-J\f[R]\f[I]option\f[R] |
| Passes \f[I]option\f[R] to the JDB JVM, where option is one of the |
| options described on the reference page for the Java application |
| launcher. |
| For example, \f[V]-J-Xms48m\f[R] sets the startup memory to 48 MB. |
| See \f[I]Overview of Java Options\f[R] in \f[B]java\f[R]. |
| .PP |
| The following options are forwarded to the debuggee process: |
| .TP |
| \f[V]-R\f[R]\f[I]option\f[R] |
| Passes \f[I]option\f[R] to the debuggee JVM, where option is one of the |
| options described on the reference page for the Java application |
| launcher. |
| For example, \f[V]-R-Xms48m\f[R] sets the startup memory to 48 MB. |
| See \f[I]Overview of Java Options\f[R] in \f[B]java\f[R]. |
| .TP |
| \f[V]-v\f[R] or \f[V]-verbose\f[R][\f[V]:\f[R]\f[I]class\f[R]|\f[V]gc\f[R]|\f[V]jni\f[R]] |
| Turns on the verbose mode. |
| .TP |
| \f[V]-D\f[R]\f[I]name\f[R]\f[V]=\f[R]\f[I]value\f[R] |
| Sets a system property. |
| .TP |
| \f[V]-classpath\f[R] \f[I]dir\f[R] |
| Lists directories separated by colons in which to look for classes. |
| .TP |
| \f[V]-X\f[R] \f[I]option\f[R] |
| A nonstandard target JVM option. |
| .PP |
| Other options are supported to provide alternate mechanisms for |
| connecting the debugger to the JVM that it\[aq]s to debug. |
| .SH WORKING WITH VIRTUAL THREADS |
| .PP |
| Often virtual theads are created in such large numbers and frequency |
| that they can overwhelm a debugger. |
| For this reason by default JDB does not keep track of virtual threads as |
| they are created. |
| It will only keep track of virtual threads that an event has arrived on, |
| such as a breakpoint event. |
| The \f[V]-trackallthreads\f[R] option can be used to make JDB track all |
| virtual threads as they are created. |
| .PP |
| When JDB first connects, it requests a list of all known threads from |
| the Debug Agent. |
| By default the debug agent does not return any virtual threads in this |
| list, once again because the list could be so large that it overwhelms |
| the debugger. |
| The Debug Agent has an \f[V]includevirtualthreads\f[R] option that can |
| be enabled to change this behavior so all known virtual threads will be |
| included in the list. |
| The JDB \f[V]-trackallthreads\f[R] option will cause JDB to |
| automatically enable the Debug Agent\[aq]s |
| \f[V]includevirtualthreads\f[R] option when JDB launches an application |
| to debug. |
| However, keep in mind that the Debug Agent may not know about any |
| virtual threads that were created before JDB attached to the debugged |
| application. |