名称
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
。使用 clear
或 stop
命令而不带参数会显示当前设置的所有断点的列表。 cont
命令继续执行。
步进
step
命令将执行前进到下一行,无论是在当前堆栈帧还是在调用的方法中。 next
命令将在当前堆栈帧中前进到下一行。
异常
catch
语句时,JVM 通常会打印异常跟踪并退出。但在 JDB 下运行时,控制返回到引发异常的 JDB。然后您可以使用
jdb
命令来诊断异常的原因。
catch
命令使调试应用程序在其他抛出的异常处停止,例如:
catch java.io.FileNotFoundException
或
catch
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 服务器中运行应用程序。
-
-J
option -
将 option 传递给 JDB JVM,其中 option 是 Java 应用程序启动器参考页面上描述的选项之一。例如,
-J-Xms48m
将启动内存设置为 48 MB。请参阅 java 中的 Java 选项概述。
-
-R
option -
将 option 传递给被调试 JVM,其中 option 是 Java 应用程序启动器参考页面上描述的选项之一。例如,
-R-Xms48m
将启动内存设置为 48 MB。请参阅 java 中的 Java 选项概述。 -
-v
或-verbose
[:
class|gc
|jni
] - 打开详细模式。
-
-D
name=
value - 设置系统属性。
-
-classpath
dir - 列出用于查找类的以冒号分隔的目录。
-
-X
option - 一个非标准目标 JVM 选项。
使用虚拟线程
-trackallthreads 选项使 JDB 跟踪所有创建的虚拟线程。
includevirtualthreads 选项,可以启用以更改此行为,以便所有已知虚拟线程都将包含在列表中。当 JDB 启动要调试的应用程序时,
-trackallthreads
选项将导致 JDB 自动启用调试代理的
includevirtualthreads
选项。但请记住,调试代理可能不知道在 JDB 附加到调试应用程序之前创建的任何虚拟线程。