开发技术-使用 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 文件的位置
开发技术-使用 JDB 调试_第1张图片
2.打开 cmd
开发技术-使用 JDB 调试_第2张图片
3.编译单个 java 文件
在 cmd 中输入命令:

javac -g SimpleDebugging.java

出现中文乱码
开发技术-使用 JDB 调试_第3张图片
输入下面的命令解决:

javac -encoding utf-8 -g SimpleDebugging.java

在文件夹中出现编译后的 class 文件
开发技术-使用 JDB 调试_第4张图片
4.执行 JDB 命令

jdb SimpleDebugging 

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

catch Exception

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

run

结果出现找不到主类错误
开发技术-使用 JDB 调试_第5张图片
5.后续操作
在源码中将包信息注释掉
开发技术-使用 JDB 调试_第6张图片
再重新运行以下命令:

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

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

list

开发技术-使用 JDB 调试_第8张图片
命令 locals 能转储所有的局部变量值:

locals

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

wherei

开发技术-使用 JDB 调试_第9张图片

你可能感兴趣的:(java,jvm,开发语言)