JDB(Java Debugger)是Java开发中常用的命令行调试工具,它允许开发者通过命令行方式监控和控制程序的执行流程,帮助定位代码中的逻辑错误,以下是JDB常用调试命令的详细介绍,涵盖断点管理、程序控制、变量查看等核心功能。

断点管理
断点是调试的核心,通过设置断点可以让程序在指定位置暂停执行,常用断点命令包括:
stop at <类名>:<行号>:在指定类的某行设置断点,例如stop at com.example.Test:20。stop in <类名>.<方法名>:在指定类的入口方法处设置断点,例如stop in com.example.Test.main。stop in <类名>.<方法名>(<参数类型>):在重载方法中设置断点,例如stop in com.example.Test.method(int)。clear <类名>:<行号>:清除指定行的断点。clear <类名>.<方法名>:清除指定方法的断点。list:列出所有已设置的断点。
程序控制
程序控制命令用于管理程序的执行流程,包括运行、单步执行、继续执行等:
run:启动程序并运行至第一个断点或程序结束。cont(或continue):从当前断点继续执行,直至遇到下一个断点或程序结束。step(或s):单步执行当前行,如果当前行是方法调用,则进入方法内部。step up(或stepi):执行当前方法并返回到调用处。next(或n):单步执行当前行,但不会进入方法内部(将方法调用视为单步)。where(或bt):显示当前线程的调用栈信息,帮助定位程序执行位置。
变量与表达式查看
调试过程中需要实时查看变量值和表达式结果,常用命令如下:
print <变量名>:打印指定变量的值,例如print x。dump <变量名>:以更详细的方式打印变量信息,包括类型和值。eval <表达式>:计算并表达式的结果,例如eval x + y。locals:显示当前方法中的所有局部变量。watch <变量名>:监视变量值的变化,当变量被修改时暂停程序。
线程与内存管理
多线程程序调试需要管理线程状态,内存问题则需要检查对象引用:

threads:列出所有活动线程及其ID。thread <线程ID>:切换当前调试的线程,例如thread 1。gc:手动触发垃圾回收,用于检查内存泄漏问题。memory:显示当前内存使用情况(需JVM支持)。
其他实用命令
load <类名>:加载指定的类,用于动态调试。unmonitor <断点ID>:取消对指定断点的监视。quit:退出JDB调试会话。
以下表格总结了核心命令的用法:
| 命令类别 | 命令格式 | 功能说明 |
|---|---|---|
| 断点管理 | stop at <类名>:<行号> | 在指定行设置断点 |
| 程序控制 | step / next | 单步执行(进入/不进入方法) |
| 变量查看 | print <变量名> | 打印变量值 |
| 线程管理 | threads | 列出所有活动线程 |
相关问答FAQs
Q1: 如何在JDB中设置条件断点?
A: 使用stop if <条件>命令,例如stop at com.example.Test:20 if x > 10,表示当变量x大于10时在20行触发断点。
Q2: JDB调试时如何查看方法参数的值?
A: 在方法入口处设置断点后,使用locals命令查看所有局部变量(包括参数),或直接通过print <参数名>指定查看。

