`

Java中的调试工具JDB 的简单使用

阅读更多

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

首先我们写一个最简单的小程序,但是它包含了一些最基本的面向对象要素。 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等,还有远程调试等内容,都很有用。这里就不一一介绍了。

分享到:
评论

相关推荐

    jdb快速参考指南,调试java程序必备

    本指南将详细介绍 jdb 的基本使用方法,帮助开发人员更好地理解和掌握如何使用 jdb 进行 Java 程序的调试。 #### 二、编译 为了能够利用 jdb 进行调试,所有的 Java 代码必须使用 `-g` 标志进行编译,这会使得...

    JDB的使用(java debug工具介绍)

    JDB 是基于文本和命令行的调试工具,提供了许多有用的命令来调试 Java 应用程序。下面是 JDB 的一些重要知识点: 命令列表 1. 连接器和传送器:使用 `connectors` 命令列出当前 VM 中可用的连接器和传送器。 2. ...

    JDK命令学习 javac java javah jdb

    本文总结了 JDK 中的各种命令,包括 javac、java、javah、jdb 等,详细介绍了 JDB 调试工具的使用方法和命令列表。通过学习这些命令,可以更好地学习和使用 Java 语言。 一、JDK 命令简介 JDK 中提供了许多实用的...

    Android So动态调试之反jdb附加的解决大法

    JDB是Java平台的标准调试工具,它允许开发者通过网络连接到运行中的Java虚拟机(JVM)进行远程调试。在Android系统中,由于Dalvik虚拟机(或ART运行时)的设计,JDB可以用于调试Dalvik字节码,但对原生代码(C/C++...

    Java开发工具包

    3. **Java调试器(jdb)**:用于检查和调试Java应用程序,可以设置断点、查看堆栈信息、单步执行代码等,是开发过程中排查问题的重要工具。 4. **环境变量配置**:在Windows系统中,正确配置JDK环境变量是使用JDK的...

    javajava调试java调试java调试java调试

    Java调试是开发者日常工作中不可或缺的一部分,它涉及到对代码的深入理解和问题排查能力。在Java编程过程中,遇到程序出错或运行异常时,调试是找出问题源头的关键步骤。本文将详细介绍Java调试的一些核心技术和方法...

    jdb调试器在Java课程有效教学中的应用探讨.pdf

    jdb调试器在Java课程有效教学中的应用探讨 本文探讨了如何应用jdb调试器进行Java课程相关知识的有效教学。jdb调试器是jdk软件包中一个非常有用的工具,它输出的调试信息比现有的图形用户界面式的集成化开发工具更...

    java运行环境工具

    以及JVM调试工具JDB,用于诊断和调试Java应用程序。 总的来说,JDK1.8作为Java开发和运行的基础,其重要性不言而喻。无论是新手还是经验丰富的开发者,都应该熟悉并掌握其特性和使用方法。对于那些依赖Java 8特性的...

    java程序开发工具集的使用共1页.pdf.zip

    6. **调试工具jdb**:Java Debug Interface (JDI) 和 jdb是Java的调试工具,帮助开发者找出代码中的错误。通过设置断点、查看变量值和步进执行,jdb使得问题定位更为便捷。 7. **性能分析工具jvisualvm**(在较新...

    JDK(Java Development Kit)是Java开发工具包,提供了Java开发所需的工具和库

    调试工具:JDK提供了调试工具,如Java调试器(jdb)、Java监视器工具(jconsole)等,帮助开发人员调试和分析Java程序。 性能工具:JDK包含了性能监控工具,如Java VisualVM、Java Mission Control等,用于监控和...

    Java开发工具JDK

    5. **Java调试器(jdb)**:这是一个命令行工具,用于调试Java程序,可以设置断点、查看变量值、单步执行等。 6. **Java应用启动器(java)**:用于启动Java应用程序,通过命令行指定主类和相关参数。 7. **Java ...

    java反编译工具

    3. **调试友好**:除了查看源代码,JD-GUI还可以与Java调试器(如JDB)配合使用,为调试提供便利。用户可以设置断点、查看变量值以及跟踪调用堆栈。 4. **跨平台**:JD-GUI支持Windows、Linux和Mac OS等主流操作...

    JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    jdb工具的功能与Sun Studio中的dbx非常相似,但jdb专门用于Java应用程序的调试。 jstat jstat是一个命令行工具,利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行监控,包括对Heap size和垃圾回收...

    JDB断点调试

    JDB(Java Debugger)是Java SDK自带的一个命令行调试工具,它可以用来对Java应用程序进行远程或本地的源代码级调试。本文将深入探讨JDB断点调试技术,以及如何在Java应用程序中连接数据库。 首先,我们需要理解...

    JDK(Java Development Kit)是Java开发工具包的简称,它是Java软件开发环境的核心组件 JDK包含了J

    jdb:Java调试器,用于调试Java程序。 javadoc:从Java源代码中提取注释并生成API文档的工具。 javap:Java反编译器,用于查看Java字节码文件中的信息。 Java Web Start:允许用户从Web页面启动Java应用程序。 Java...

    Java 命令行以及Java工具总结

    7. jdb:Java调试器。它是Java平台调试架构(JPDA)的一部分,用于调试Java应用程序。 8. javah:C头文件和存根生成器。它用于编写本地方法,即调用非Java代码的方法。 9. javap:类文件的反汇编器。它可以查看...

Global site tag (gtag.js) - Google Analytics