首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

JDB 的简单使用(2)

JDB 的简单使用(2)

[size=1.0625]接下来的问题自然是如何查看对象。当程序运行到 new 命令处时,键入locals,可以看到

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875]8


[size=0.875]9


[size=0.875]10


[size=0.875]11


[size=0.875]12


[size=0.875]13


[size=0.875]14


[size=0.875]15


[size=0.875]16


[size=0.875]17


[size=0.875]18


[size=0.875]19


[size=0.875]20


[size=0.875][size=0.875]main[1] step
[size=0.875]main[1]
[size=0.875]Breakpoint hit: test. (test:5)
[size=0.875]main[1] list
[size=0.875]1          class test
[size=0.875]2          {
[size=0.875]3               int a;
[size=0.875]4               int b;
[size=0.875]5       =>      test(int aa,int bb)
[size=0.875]6               {
[size=0.875]7                       a = aa;
[size=0.875]8                       b = bb;
[size=0.875]9                       }
[size=0.875]main[1] locals
[size=0.875]Method arguments:
[size=0.875]Local variables:
[size=0.875]  this = test@64fd6722
[size=0.875]  aa = 1
[size=0.875]  bb = 2
[size=0.875]main[1]




[size=1.0625]可以看到此时显示的变量值是类 test 中构造函数中的变量值。 this 对象即为当前构造的对象。可以用dump 命令进行查看。

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875][size=0.875]main[1] dump this
[size=0.875]this = (test)0x11a {
[size=0.875]    int b = 0
[size=0.875]    int a = 0
[size=0.875]}




[size=1.0625]也可以在 main 函数中用 dump kk 和 print 命令进行对象查看

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875]8


[size=0.875]9


[size=0.875]10


[size=0.875]11


[size=0.875][size=0.875]main[1] dump kk
[size=0.875]kk = (test)0x11a {
[size=0.875]    int b = 2
[size=0.875]    int a = 1
[size=0.875]}
[size=0.875]main[1] print kk
[size=0.875]kk = test@64fd6722
[size=0.875]main[1] print kk.a
[size=0.875]kk.a = 1
[size=0.875]main[1] print kk.b
[size=0.875]kk.b = 2




[size=1.0625]最后键入 cont 命令,如果没有其他断点,程序就直接运行完毕退出。调试结束。

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875][size=0.875]main[1] cont
[size=0.875]3
[size=0.875]> Current thread "main" died. Execution continuing...
[size=0.875]>
[size=0.875]hehe exited




[size=1.0625]上述操作中的断点都是设置在 main 函数中的,如果要设置在调用的类方法中,则要用 stop in yourclassname.functionname 命令来进行设置,比如说:

[size=0.875]1


[size=0.875]2


[size=0.875]3


[size=0.875]4


[size=0.875]5


[size=0.875]6


[size=0.875]7


[size=0.875]8


[size=0.875]9


[size=0.875]10


[size=0.875]11


[size=0.875]12


[size=0.875]13


[size=0.875]14


[size=0.875]15


[size=0.875]16


[size=0.875]17


[size=0.875]18


[size=0.875][size=0.875]> stop in test.add
[size=0.875]Breakpoint set in test.add
[size=0.875]> run
[size=0.875]run hehe
[size=0.875]running ...
[size=0.875]main[1] 5
[size=0.875]Breakpoint hit: test.add (test:11)
[size=0.875]main[1] list
[size=0.875]7                       a = aa;
[size=0.875]8                       b = bb;
[size=0.875]9                       }
[size=0.875]10              int add()
[size=0.875]11      =>      {return a+b;}
[size=0.875]12         }
[size=0.875]13         public class hehe
[size=0.875]14         {
[size=0.875]15              public static void main(String args[])
[size=0.875]main[1]




[size=1.0625]这样的话,我们已经可以在程序中的几乎所有需要地方的地方进行断点设置并进行跟踪,查看变量。
[size=1.0625]JDB还有很多的调试手段,除了上面那些最常用的,其他很重要的还有clear清除断点,use设置源程序路径,memory显示当前内存使用状况,gc强制进行内存回收,!!重复上面的命令,thread设置当前线程,quit和exit退出jdb等,还有远程调试等内容,都很有用。这里就不一一介绍了。
山不在高,有仙则名;水不在深,有龙则灵。
返回列表