The jdb Command

名称

jdb - 查找并修复 Java 平台程序中的错误

简介

jdb [选项] [类名] [参数]

选项
这代表了 jdb 命令行选项。请参阅 JDB 命令选项
类名
这代表了要调试的主类的名称。
参数
这代表了传递给类的 main() 方法的参数。

描述

Java 调试器(JDB)是用于 Java 类的简单命令行调试器。 jdb 命令及其选项调用 JDB。 jdb 命令演示了 Java 平台调试架构,并提供了对本地或远程 JVM 的检查和调试。

启动 JDB 会话

jdb 命令替换 java 命令来实现。例如,如果应用程序的主类是 MyClass,则使用以下命令在 JDB 下调试它:

jdb MyClass

jdb 命令调用第二个 JVM 并加载指定的类,并在执行该类的第一条指令之前停止 JVM。

jdb 命令的方法是将其附加到已经运行的 JVM。当 JVM 运行时,启动 JVM 并使 jdb 命令附加到 JVM 的语法如下。这会加载进程内调试库并指定要建立的连接类型。

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass

jdb 命令附加到 JVM:

jdb -attach 8000

jdb 命令行中未指定 MyClass 参数,因为 jdb 命令是连接到现有 JVM 而不是启动新 JVM。

jdb 命令的支持。Java 平台调试架构有关这些连接选项的其他文档。

断点

  • 命令 stop at MyClass:22 在包含 MyClass 的源文件的第 22 行的第一条指令处设置断点。

  • 命令 stop in java.lang.String.length 在方法 java.lang.String.length 的开头设置断点。

  • 命令 stop in MyClass.<clinit> 使用 <clinit> 来标识 MyClass 的静态初始化代码。

MyClass.myMethod(int,java.lang.String)MyClass.myMethod()

clear 命令使用以下语法删除断点:clear MyClass:45。使用 clearstop 命令而不带参数会显示当前设置的所有断点的列表。 cont 命令继续执行。

步进

step 命令将执行前进到下一行,无论是在当前堆栈帧还是在调用的方法中。 next 命令将在当前堆栈帧中前进到下一行。

异常

catch 语句时,JVM 通常会打印异常跟踪并退出。但在 JDB 下运行时,控制返回到引发异常的 JDB。然后您可以使用 jdb 命令来诊断异常的原因。

catch 命令使调试应用程序在其他抛出的异常处停止,例如: catch java.io.FileNotFoundExceptioncatch mypackage.BigTroubleException。任何是指定类或子类的异常都会在抛出异常的地方停止应用程序。

ignore 命令取消先前 catch 命令的效果。 ignore 命令不会使调试的 JVM 忽略特定异常,而只是忽略调试器。

JDB 命令选项

jdb 命令而不是 java 命令时, jdb 命令接受许多与 java 命令相同的选项。

jdb 命令接受以下选项:

-help
显示帮助消息。
-sourcepath dir1:dir2:...
使用指定路径搜索指定路径中的源文件。如果未指定此选项,则使用默认路径点(.)。
-attach address
将调试器附加到正在运行的 JVM,使用默认连接机制。
-listen address
等待正在运行的 JVM 通过标准连接器连接到指定地址。
-listenany
等待正在运行的 JVM 通过标准连接器连接到任何可用地址。
-launch
在启动 jdb 命令时立即启动调试应用程序。 -launch 选项消除了 run 命令的需要。调试的应用程序在启动后立即启动,然后在加载初始应用程序类之前停止。在那时,您可以设置任何必要的断点并使用 cont 命令继续执行。
-listconnectors
列出此 JVM 中可用的连接器。
-connect connector-name:name1=value1....
使用指定的连接器名称和列出的参数值连接到目标 JVM。
-dbgtrace [flags]
打印用于调试 jdb 命令的信息。
-tclient
在 Java HotSpot VM 客户端中运行应用程序。
-trackallthreads
跟踪所有线程的创建,包括虚拟线程。请参阅下面的 使用虚拟线程
-tserver
在 Java HotSpot VM 服务器中运行应用程序。
-Joption
option 传递给 JDB JVM,其中 option 是 Java 应用程序启动器参考页面上描述的选项之一。例如,-J-Xms48m 将启动内存设置为 48 MB。请参阅 java 中的 Java 选项概述

-Roption
option 传递给被调试 JVM,其中 option 是 Java 应用程序启动器参考页面上描述的选项之一。例如,-R-Xms48m 将启动内存设置为 48 MB。请参阅 java 中的 Java 选项概述
-v-verbose[:class|gc|jni]
打开详细模式。
-Dname=value
设置系统属性。
-classpath dir
列出用于查找类的以冒号分隔的目录。
-X option
一个非标准目标 JVM 选项。

使用虚拟线程

-trackallthreads 选项使 JDB 跟踪所有创建的虚拟线程。

includevirtualthreads 选项,可以启用以更改此行为,以便所有已知虚拟线程都将包含在列表中。当 JDB 启动要调试的应用程序时, -trackallthreads 选项将导致 JDB 自动启用调试代理的 includevirtualthreads 选项。但请记住,调试代理可能不知道在 JDB 附加到调试应用程序之前创建的任何虚拟线程。