断点调试(debug)

简介: 断点调试(debug)

介绍:断点调试是指在程序的某一行设置一个断电,调试时,程序运行到这一行就会停住,然后可以一步步往下调试,调试过程中可以看到各个变量当前的值,如果出错的话,调试到出错的代码行就会显示错,进行分析从而找到这个bug。


快捷键:F7(跳入:跳入方法内),F8(跳过:逐行执行代码),shift+F8(跳出:跳出方法),F9(resume,执行到下一个断点)


F8案例

public class Debug01 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 0; i <= 3; i++) {
            sum += i;
            System.out.println("i=" + i);
            System.out.println("sum=" + sum);
        }
        System.out.println("结束循环");
    }
}


逐行执行代码

52efcfc9e0d84281a373cc7a99232863.png


遇到输出语句会挨个输出


99d8fdb7dfef4d9cbb991cff9802f098.png


循环执行完后就会执行后面的语句

7e25649daf734ef4a619a33272f47a64.png


直到该程序所有语句全部执行完就会自动跳出


b37ff57fd5b14ff8ab002e12478a2c04.png

debug过程中报错

public class Debug02 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        for (int i = 0; i <= arr.length; i++) {
            System.out.println(arr[i]);
        }
        System.out.println("循环结束");
    }
}

d94170acee7a4feb88b90e0ec3ac933a.pnga6f27de0c4e249b382e47acec855ed7f.png

用debug查看方法源码

import java.util.Arrays;
public class Debug03 {
    public static void main(String[] args) {
        int[] arr = {1, -1, 2, -2, 10, 5};
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
    }
}


两种方法:

(1)在不做任何操作的情况下按F7并没有进入该方法的源码


e0c6cb5e07a9488b92fa3b6d320a3957.png


在设置中将如下两条语句取消勾选即可F7


4bee87af90f14c3f865b96a91979a5a3.png

ff1cfdebdfbf43179af61e9ed0617631.png


(2)alt + shift + F7强制进入


be223644817742fd883e4c53c80bedc9.png

一层一层查看 Arrays.sort()方法


9237b9bc91db4167a0cb7846db96ab04.png

ecf9292c77e14eefa9c9d41bf84a71d2.png

e4827f09e01748539971b1934fa60d05.png

8dc37207919348eda4a6d3c13af4dfd3.png

dcf1350899ec48878bad86f6be44d7ea.png

a7cbb51a712d46259b9216de167795bc.png


F9

断点可以在debug过程中,动态的下断点


a451266f269e46c1bc648b012eefdf34.png

按下F9键,会直接跳转到下一个断点处,并且将第二个断点前的语句全部执行

4c58c34fc2b64069bdfe8c0d22ebb0f3.png


也可以不断地继续去动态增加断点,进行测试

fbde995583d24bfea51a1210e4f4c8b0.png


DebugExercise

使用断点调试,追踪下一个对象创建的过程

创建对象的流程

(1)加载Person类信息

(2)初始化 默认初始化 -> 显示初始化 -> 构造器初始化

(3)返回对象地址

public class DebugExercise {
    public static void main(String[] args) {
        Person person = new Person("周小末", 18);
        System.out.println(person);//默认调用toString
    }
}
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}


(1)debug查看加载Person类信息

161ab6be8cb34b1e8c59e4d56affcb4d.png

从创建person对象处F8,会直接到Person类中的构造器


c0bd049230114b2e8fcbdfb9952b94ea.png


一直进行,会在构造器执行完后返回 System.out.println(person);

bf4e40ddeffe418d838d1d92c88d055d.png

(2)debug查看System.out.println(person); 中的person有没有调用toString方法

873069e77aa441aea7c02a2ae3b4b722.png

然后继续alt+shift+F7 String.valueOf(x)


52ed39ad2cca41c88997bb574cb32421.png


如果obj不为空,则调用obj中的toString方法 ,又因为obj的运行类型是Person


efa9842126fb4412bd1c4417155ce989.png

所以就会直接进入到Person类中的toString方法

b814fa8f5ad14a5e849831afd0d0bf65.png

相关文章
Idea在debug时打上断点没有用 Skipped breakpoint at ... because it happened inside debugger evaluation
Idea在debug时打上断点没有用 Skipped breakpoint at ... because it happened inside debugger evaluation
1594 0
|
3月前
|
应用服务中间件 PHP nginx
phpstorm开启debug断点调试模式
phpstorm开启debug断点调试模式
82 2
|
2月前
|
运维 NoSQL 安全
debug学习
debug学习
142 65
|
1月前
|
算法 程序员 编译器
VS里那些实用的调试(debug)技巧
VS里那些实用的调试(debug)技巧
77 0
VS里那些实用的调试(debug)技巧
|
4月前
|
Shell Python
调试程序的故乡_调试程序_debug_next_下一步_list_pdb3
这篇 content 主要介绍了使用调试工具 pdb3 进行 Python 程序调试的基本步骤与技巧。首先,当遇到调试困境时,可以通过输入 `help` 查看可用命令。使用 `l` (list) 或 `ll` (list long) 分别查看当前行附近的代码或整个程序的代码。`l .` 和 `l n` 可以分别用于查看当前行周围的代码或从第 n 行开始的代码。通过 `next` (`n`) 命令逐步执行程序,观察每一步的结果。当到达程序末尾并再次使用 `next` 时,程序会重新开始执行。
25 2
|
5月前
深入理解Debug断点调试技巧
深入理解Debug断点调试技巧
103 1
|
6月前
|
程序员
调试程序DEBUG的使用
调试程序DEBUG的使用
63 0
|
6月前
|
网络架构
Debug系统调试
Debug系统调试