开发技术-使用 JDB 调试

Java 调试器(JDB)是 JDK 内置的命令行工具。从调试的指令和命令行接口两方面看的话,JDB 至少从概念上是 GNU 调试器(GDB,受 Unix DB 的影响)的继承者。
示例:

public class SimpleDebugging {
    private static void foo1() {
        System.out.println("In foo1");
        foo2();
    }

    private static void foo2() {
        System.out.println("In foo2");
        foo3();
    }

    private static void foo3() {
        System.out.println("In foo3");
        int j = 1;
        j--;
        int i = 5 / j;
    }

    public static void main(String[] args) {
        foo1();
    }
}

输出:

In foo1
In foo2
In foo3
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at validating.SimpleDebugging.foo3(SimpleDebugging.java:23)
	at validating.SimpleDebugging.foo2(SimpleDebugging.java:16)
	at validating.SimpleDebugging.foo1(SimpleDebugging.java:11)
	at validating.SimpleDebugging.main(SimpleDebugging.java:27)

为了运行 JDB,你需要在编译 SimpleDebugging.java 时加上 -g 标记,从而告诉编译器生成编译信息。
1.在 IDEA 上找到 java 文件的位置
在这里插入图片描述
2.打开 cmd
在这里插入图片描述
3.编译单个 java 文件
在 cmd 中输入命令:

javac -g SimpleDebugging.java

出现中文乱码
在这里插入图片描述
输入下面的命令解决:

javac -encoding utf-8 -g SimpleDebugging.java

在文件夹中出现编译后的 class 文件
在这里插入图片描述
4.执行 JDB 命令

jdb SimpleDebugging 

注意:不带 class 后缀
接着 JDB 就会运行,出现命令行提示。你可以输入 ? 查看可用的 JDB 命令。
输入:

catch Exception

命令 catch Exception 在任何抛出异常的地方设置断点。
继续输入:

run

结果出现找不到主类错误
在这里插入图片描述
5.后续操作
在源码中将包信息注释掉
在这里插入图片描述
再重新运行以下命令:

javac -encoding utf-8 -g SimpleDebugging.java
jdb SimpleDebugging 
catch Exception
run

现在程序将运行到下个断点处,在这个例子中就是异常发生的地方。下面是运行 run 命令的结果:
在这里插入图片描述
程序运行到第16行时发生异常,但是 JDB 在异常发生时就不复存在。调试器还展示了是哪一行导致了异常。你可以使用 list 将导致程序终止的执行点列出来:

list

在这里插入图片描述
命令 locals 能转储所有的局部变量值:

locals

命令 wherei 打印进入当前线程的方法栈中的栈帧信息:

wherei

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值