jdb - The Java Debugger
jdb 是一个简单的命令行调试器,可以调试本地或远程 Java Virtual Machine。
jdb [ options ] [ class ] [ arguments ] options 命令行参数 class 调试的类名称 arguments main函数的参数
1. 开始调试
有两种方式启动调试,一个是新启动一个 JVM 加载指定的类,然后在开始执行指令时停止;另一个是连接到一个正在运行的 JVM。具体方法如下。
(1) C:\> jdb MyClass (2) C:\> java -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n MyClass C:\> jdb -attach jdbconn
2. jdb 基本操作命令
help, or ? 显示帮助信息 run [class [args]] 执行 main 方法 threads 列出正在运行的线程 thread <thread id> 设置默认线程 where 转储线程堆栈 print 显示Java对象(简短描述)或原始数据类型值,若要显示本地变量在编译时需添加 -g 参数 print 支持简单的Java表达式,如下: print MyClass.myStaticField print myObj.myInstanceField print i + j + k (i, j, k are primities and either fields or local variables) print myObj.myMethod() (if myMethod returns a non-null) print new java.lang.String("Hello").length() dump 原始类型打印值,对象打印每个字段(静态和实例)的当前值,同print也支持表达式 locals 输出当前栈帧本地变量 classes 列出当前已知的类 class <class id> 显示类详细信息 methods <class id> 列出类方法 fields <class id> 列出类字段 stop in <class id>.<method>[(argument_type,...)] 在方法中设置断点 stop at <class id>:<line> 在某一行设置断点 stop at MyClass:22 (在 MyClass 第22行设置断点) stop in java.lang.String.length (在String.length方法设置断点) stop in MyClass.<init> (MyClass 构造函数) stop in MyClass.<clinit> (MyClass 静态块初始化方法) clear <class id>.<method>[(argument_type,...)] 清除一个方法的断点 clear <class id>:<line> 清除某一行断点 clear 列出所有断点 step 执行到下一行 next 执行当前栈帧下一行 cont 从断点处继续执行 exit 退出
3. 命令行选项
# jdb 也识别许多java命令选项,如-D,-classpath,-X<option>(非标准 VM 选项) -help 显示帮助信息 -sourcepath <dir1:dir2:...> 在指定路径下搜索源文件,默认在当前目录下 -connect <connector-name>:<name1>=<value1>,... 附带参数连接到目标 JVM -tclient Java HotSpot™ VM (Client) -tserver Java HotSpot™ VM (Server) -Joption 将选项传递给JVM,以运行jdb,如-J-Xms48m 设置堆大小
4. 调试 Hello World
更多信息,请参考:jdb