当新手开始学习Java时,在一开始的新鲜感后马上就会发现的一个问题就是如何调试。大家知道在Visual C++中提供了很好的调试工具,使用起来特别的方便。Java中,以JDK为例,没有一个方便的图形界面,所以给新手调试带来了很多的困难。很多人一开始是用System.out.println()来观察输出结果。如果写的程序很大,这样的方法就显然是效率太低。下面结合自己的学习体会简单谈一下Java中的调试工具JDB的使用。
环境:jdk 1.2.2
首先我们写一个最简单的小程序,但是它包含了一些最基本的面向对象要素。
CCCCCC"> class test { int a; int b; test(int aa,int bb) { a = aa; b = bb; } int add() {return a+b;} } public class hehe { public static void main(String args[]) { int a = 2; int b = 3; int c= a+b; System.out.println(c); test kk=new test(1,2); System.out.println(kk.add()); } |
存为hehe.java后,用javac -g hehe.java进行编译。用参数g是为了产生各种调试信息,不用就无法调试。如果这里遇到问题,请参考Helloworld攻略。上面的程序是可以通过的,可以直接用java hehe运行。下面结合该例子谈谈JDB的使用。
首先键入jdb hehe 如果出现下面信息,说明系统没有找到调试的类。此时可以用java -classpath . hehe命令解决。
C:\javasource>jdb hehe Initializing jdb... hehe not found > |
如果出现一下信息,说明开始进行调试,一切正常。如果是调试Applet,则用 appletviewer -debug hehe.html命令进行调试
C:\javasource>jdb -classpath . hehe Initializing jdb... 0xb0:class(hehe) > |
回想VC中的调试,应该是设置断点,然后再进行跟踪。Java中也是一样。用stop命令进行断点设置。然后用 run 命令开始调试,运行程序到断点,这里断点是设置在 main 主函数中。
> stop at hehe:18 Breakpoint set at hehe:18 > run run hehe running ... main[1] Breakpoint hit: hehe.main (hehe:18) main[1] |
此时可以用locals命令查看变量,用step命令进入下一条命令,也可以用单独一个stop命令来查看断点的设置情况。注意此时b还没有被赋值。
main[1] locals Method arguments: Local variables: args = a = 2 main[1] step main[1] Breakpoint hit: hehe.main (hehe:19) main[1] |
当运行到 System.out.println() 函数时,会出现以下提示:
main[1] step main[1] Breakpoint hit: java.lang.ClassLoader.loadClass (ClassLoader:247) |
这个是因为我们跟踪进去了 println 方法,我们一般没有必要这样做,此时可以用next跳过该方法进入到下一条一句。step的含义是进入函数跟踪,next是转入下一条语句执行。我们随时可以键入 locals 和 list 命令来查看变量值和当前运行的代码。下面箭头指到地方即为当前程序运行到的地方。
(未完待续)
文章来源于领测软件测试网 https://www.ltesting.net/