Java程序调试工具——jdb

来源:互联网 发布:unity3d 流媒体 编辑:程序博客网 时间:2024/06/01 08:59

一般继承开发环境(IDE)都提供了设置断点和单步跟踪的功能,也就是程序员常说的·Debug(调试)能力。
其实JDK在自己的bin目录下边也有这样一套工具——jdb帮我们完成调试。
这里给出一个简单的程序“Hello.java”

1   public class Hello2 {3   public static void main(String[] args)4   {5       String greeting="Hello WindowsUtils!";6       System.out.println(greeting);7   }8 }

首先使用javac -g Hello.java
编译类文件,
这里要说的是javac -g Hello.java 是为了在调试阶段获取变量信息,多一个“-g”。
使用DOS命令却换到Hello.class文件所在的目录,(假设是F:\Hello.class)不是很清楚的可以参考下边,懂得可以直接跳过这部分:
cmd进入DOS窗口
进行如图
这里写图片描述
(f:中的大小写都一样)
这是就可以
jdb Hello命令进入到jdb的交互环境并同时把类文件加载进来。
如图操作
这里写图片描述
(1)、首先使用stop at Hello:5在第五行设置断点,
(2)、再run运行,这时就在断点处停住了,
(3)、这时用locals显示变量(本地变量为空,还没运行到那里),
(4)、step(或者next)单步进入,能看到从第五步运行到第六步,
(5)、再step(或者next)接着运行到第七步,也就是第六步完成,输出“Hello WindowsUtils! ”字符串,
(6)、cont表示执行完程序余下的部分并退出jdb环境。
当然也可以使用list命令吧源码输出一次,看看是否是自己的源文件。
如图
这里写图片描述

这些就是我们调试最常用的命令的使用场景。jdb的常用的命令远不止这几个,最后我再列出常用(除了上边的)的命令:
exit(或quit): 退出调试器

help(或?): 列出所有命令

ignore classID: 忽略特定的异常接口

load classname: 载入要调试的Java类

methods classID : 列出一个类的成员方法集

print ID[ID…]: 打印变量值

dump ID: 打印变量的详细信息

resume [threadID …]: 恢复线程(默认情况下回复所有线程)

suspend[threadID…]: 停止一个线程(默认情况下停止所有线程)

当然你也可以查看官方文档,更加详细了
https://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html(jdb7官方文档)

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr011.html#BABGIEHH(jdb8官方文档)

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/introclientissues005.html(以及同样很重要的dk8中的JDWP官方文档)

原创粉丝点击