当前位置:  技术问答>java相关

jdk中有单步执行的命令吗?如何实现?

    来源: 互联网  发布时间:2015-05-30

    本文导语:  jdk中有单步执行的命令吗?如何实现?请帮帮忙。 | 当新手开始学习Java时,在一开始的新鲜感后马上就会发现的一个问题就是如何调试。大家知道在Visual C++中提供了很好的调试工具,使...

jdk中有单步执行的命令吗?如何实现?请帮帮忙。

|
当新手开始学习Java时,在一开始的新鲜感后马上就会发现的一个问题就是如何调试。大家知道在Visual C++中提供了很好的调试工具,使用起来特别的方便。Java中,以JDK为例,没有一个方便的图形界面,所以给新手调试带来了很多的困难。很多人一开始是用System.out.println()来观察输出结果。如果写的程序很大,这样的方法就显然是效率太低。下面结合自己的学习体会简单谈一下Java中的调试工具JDB的使用。
环境:jdk 1.2.2 

首先我们写一个最简单的小程序,但是它包含了一些最基本的面向对象要素。 
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 命令来查看变量值和当前运行的代码。下面箭头指到地方即为当前程序运行到的地方。 
main[1] next
main[1]
Breakpoint hit: hehe.main (hehe:20)
main[1] list
16              {
17                      int a = 2;
18                      int b = 3;
19                      int c= a+b;
20      =>              System.out.println(c);
21                      test kk=new test(1,2);
22                      System.out.println(kk.add());
23
24              }
main[1]
 


接下来的问题自然是如何查看对象。当程序运行到new命令处时,键入locals,可以看到 main[1] step
main[1]
Breakpoint hit: test. (test:5)
main[1] list
1          class test
2          {
3               int a;
4               int b;
5       =>      test(int aa,int bb)
6               {
7                       a = aa;
8                       b = bb;
9                       }
main[1] locals
Method arguments:
Local variables:
  this = test@64fd6722
  aa = 1
  bb = 2
main[1]
 


可以看到此时显示的变量值是类test中构造函数中的变量值。this对象即为当前构造的对象。可以用dump命令进行查看。 
main[1] dump this
this = (test)0x11a {
    int b = 0
    int a = 0
}
 


也可以在main函数中用dump kk和print命令命令进行对象查看 main[1] dump kk
kk = (test)0x11a {
    int b = 2
    int a = 1
}
main[1] print kk
kk = test@64fd6722
main[1] print kk.a
kk.a = 1
main[1] print kk.b
kk.b = 2
 


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

> Current thread "main" died. Execution continuing...
>
hehe exited

 


上述操作中的断点都是设置在main函数中的,如果要设置在调用的类方法中,则要用 stop in yourclassname.functionname 命令来进行设置,比如说: > stop in test.add
Breakpoint set in test.add
> run
run hehe
running ...
main[1] 5
Breakpoint hit: test.add (test:11)
main[1] list
7                       a = aa;
8                       b = bb;
9                       }
10              int add()
11      =>      {return a+b;}
12         }
13         public class hehe
14         {
15              public static void main(String args[])
main[1]

 


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


|
在jcreator中可使用jdk的调试功能:
单步调试用:
step                      -- execute current line
输入help 可列出所用命令
-- help (or ?)               -- list commands

|
你可以用JDB调试程序。

|
好象没有
如果你想用的话,就用那些集成开发环境,特别的方便
比如Jbuilder等

|
jbuilder实现这些功能很容易的,试一试用用它。

    
 
 

您可能感兴趣的文章:

  • 我用rpm命令刚刚装了jdk1.42,但是不知道jdk装到哪个目录下去了,只好来求助于大家了。
  • 在linux的命令模式下,怎样设置JDK?
  • JDK1.3 中的java命令不好用?
  • Application的参数在jdk1.3的命令行下如何设定?
  • 在windowsXP上装上了jdk1.2.2也写了autoexec.bat,可是运行时总说没有这个命令,why?
  • 请问如何用jdk命令编译java源文件?高分求救
  • 请问如何将servlet的.java文件编译成.class文件,我用了jdk的javac命令不好使阿???
  • 我的jdk配置有问题吗?为什么提示总是‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件
  • 用jbuilder7编写成功运行正常的程序在用jdk中java命令执行出错,请帮忙!
  • 我用JDK中的javac命令编译一个test.java。系统提示不能打开test.java该文件!!!
  • 奇怪的问题,我的jdk1.2.2,用javac命令可以编译成class文件,但使用java运行时却说找不到类文件
  • jdk中密钥和证书管理工具keytool常用命令详解
  • 如何用JDK的jar.exe命令列出jar档的内容?
  • ultraedit+jdk上怎样程序能在utraedit上执行??
  • jbuilder7.0的可执行文件真的不用jdk来实现吗?
  • 我在xp下安装jdk1.2,安装可以成功,但执行java,javac系统报错
  • jdk执行java是产生
  • 用JB5如何编译执行JDK开发的java文件
  • java程序的扩展名是什么?如何用jdk编译并生成一个可执行文件呢?我太菜了。各位大侠见笑了。
  • 请问哪本书较全面的讲如何设置用JDK编译执行JAVA程序的环境?
  • 我的.class文件只有拷贝到 jdkbin目录下才能正确执行
  • 在Linux7.2+Tomcat3+Jdk1.2.2的环境下怎样用JAVA调用Shell程序(在服务器端执行)
  • 用servlet在后台画了一个图形,可是用jdk编译成.class文件以后,这个图形没有生成,好像是必须要在浏览器中执行这个.class文件以后才能生
  • 着急!我安装jdk1.4时,按照java网上的安装顺序进行,可执行不下去,为什么?具体见内容
  • 我安装完JDK1.4后,完成环境变量的设置。执行编译程序javac *.java,但出现错误提示信息bed command or file name!!
  • 小菜鸟的问题:用jdk的java可以解释执行出一个窗体么???我的例子:
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • 请问jdk源程序中,许多native方法是怎么实现的?
  • 解决java 查看JDK中底层源码的实现方法
  • JDK 1.4到底有没有实现Generic type(JSR-14)?
  • 请问哪个函数能够实现日期的加减?(在jdk1.2环境下)
  • 多jdk环境下安装多个tomcat冲突解决配置方法
  • 在SUN网站下载下载JDK,一个jdk..i586.bin,另一个jdk..i586-rpm.bin,我该选择哪个啊?各有什么区别?
  • PLEASE,JDK1.3与JDK1.4???????
  • 怎么把JBuilder自带的JDK 1.3换成 JDK 1.4?
  • jdk 1.4.0 servlet 包还在javax包里面嘛?我以前用jdk1.3搞定的东西在jdk1.4 编译不出来啦,高分求教,明天结贴
  • 在哪儿能下载jdk1.4或jdk1.3,很急!在线等待!
  • 我手动删除了jbuilder6自带的jdk,如何才能让jbuilder用我其他地方的jdk呀?
  • JB7能当JDK用吗?哪位朋友告诉我怎么把它当JDK用啊?
  • 一个是SUN JDK一个是MS JDK,怎么回事吗?
  • 我在WIN2000下怎么也安装不上JDK1.3,请问是怎么回事。JDK1.2倒可以安上。
  • 如何使用jdk?我刚装了jdk1.3,不知如何使用?多谢!
  • JDK+HTTPD+WEBSPHERE为什么不解释JSP,httpd.conf中如何设置jdk路径
  • JDK1.3 中的java命令不好用? iis7站长之家
  • 基于Fedora14下自带jdk1.6版本 安装jdk1.7不识别的解决方法
  • 请问jdk1.3和jdk1.4有什么不同?
  • 请问jdk1.1.8中的javax.activation.DataSource在jdk1.3中在什么包里?
  • jdk1.3 standard 与 jdk1.2 enterprise有何区别?
  • 在WIN/XP下如何设置JDK1.3.1/JDK1.4的路径!
  • Solaris10默认安装JDK1.5,我还能安装JDK1.4么?
  • 请问:我的Linux机器上装有JDK1.1.8,现在我想安装JDK1.3.1,我该怎么做呢?
  • 请问Applet可否再没有按装JDK的电脑上正常显示。没装JDK==没装Java虚拟机吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3