JDB的简单使用(1)

发表于:2007-07-14来源:作者:点击数: 标签:
JDB的简单使用(1) 当新手开始学习 Java 时,在一开始的新鲜感后马上就会发现的一个问题就是如何调试。大家知道在Visual C++中提供了很好的调试工具,使用起来特别的方便。Java中,以JDK为例,没有一个方便的图形界面,所以给新手调试带来了很多的困难。
JDB的简单使用(1)

当新手开始学习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 命令来查看变量值和当前运行的代码。下面箭头指到地方即为当前程序运行到的地方。
(未完待续)

原文转自:http://www.ltesting.net