名称
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 - 显示帮助消息。
-
-sourcepathdir1:dir2:... -
使用指定路径搜索指定路径中的源文件。如果未指定此选项,则使用默认路径点(
.)。 -
-attachaddress - 将调试器附加到正在运行的 JVM,使用默认连接机制。
-
-listenaddress - 等待正在运行的 JVM 通过标准连接器连接到指定地址。
-
-listenany - 等待正在运行的 JVM 通过标准连接器连接到任何可用地址。
-
-launch -
在启动
jdb命令时立即启动调试应用程序。-launch选项消除了run命令的需要。调试的应用程序在启动后立即启动,然后在加载初始应用程序类之前停止。在那时,您可以设置任何必要的断点并使用cont命令继续执行。 -
-listconnectors - 列出此 JVM 中可用的连接器。
-
-connectconnector-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 - 设置系统属性。
-
-classpathdir - 列出用于查找类的以冒号分隔的目录。
-
-Xoption - 一个非标准目标 JVM 选项。
使用虚拟线程
-trackallthreads 选项使 JDB 跟踪所有创建的虚拟线程。
includevirtualthreads 选项,可以启用以更改此行为,以便所有已知虚拟线程都将包含在列表中。当 JDB 启动要调试的应用程序时,
-trackallthreads 选项将导致 JDB 自动启用调试代理的
includevirtualthreads 选项。但请记住,调试代理可能不知道在 JDB 附加到调试应用程序之前创建的任何虚拟线程。