IDEA debug断点调试认识与技巧
文章目录
- IDEA debug断点调试认识与技巧
- 认识debug
- 常见的操作
- 如何开启debug模式
- 基本用法和快捷键
- 1、显示执行点(Alt + F10)
- 2、步过(F8)
- 3、步入(F7)
- 4、强制步入(Alt + Shift + F7)
- 5、步出(Shift + F8)
- 6、丟帧
- 7、运行到光标处(Alt + F9)
- 8、评估表达式(Alt + F8)
- 9、跟踪当前流链
- 10、恢复程序(F9)
- 11、终止程序(Ctrl + F2)
- 12、查看断点(Ctrl + Shift + F8)
- 13、静音断点
- 14、存放变量信息
- 15、监视变量变化
- 设置断点调试和断点分类
- 1、属性断点
- 2、方法断点
- 3、行断点
- 4、异常断点
- 5、条件断点
- 6、流断点
- 7、多线程断点
- 断点调试小技巧
认识debug
在我们开发应用程序的过程中,调试是非常重要的一环,而IDEA作为一款流行的开发工具,其内置的调试器也同样强大易用。在IDEA中进行debug操作是非常简单的。我们只需要启动debug模式、设置断点、运行程序,并进行必要的调试操作即可。通过debug,我们可以更快速地定位问题,提高开发效率。
常见的操作
-
查看变量值
查看变量的值来分析程序的执行过程。在IDEA底部的调试窗口中查看变量的值。另外,在代码中选中一个变量名,可以通过右键菜单中的
Evaluate Expression
查看变量值 -
单步执行代码
使用
F8
键进行单步执行代码。单步执行是指一次执行一行代码。通过单步执行,我们可以跟踪程序的执行路径,并查看每一行代码的变化 -
跳过当前代码块
执行某个代码块,可以使用
F9
键跳过当前代码块 -
修改变量值
修改变量的值。选中一个变量名,右键菜单中选择
Set Value
,即可修改变量的值 -
其他操作
可以在调试过程中查看函数调用堆栈、查看异常、设置表达式监视等
如何开启debug模式
在IDEA中开启debug模式。单击debug按钮(小虫子按钮)进行调试,或者选择菜单栏的“Run”->“Debug”,即可打开debug模式。
基本用法和快捷键
以下介绍序号根据上图标注顺序讲解
1、显示执行点(Alt + F10)
用的不多,当前如果在别的页面,点击此按钮可以回到断点位置
2、步过(F8)
即不管该行有无断点,一步步往下走,不会进入方法中
3、步入(F7)
可以进入自定义方法,但是不会进入系统类库方法
4、强制步入(Alt + Shift + F7)
可以进入深层方法,包括官方源码
5、步出(Shift + F8)
从对应步入的方法中出来
6、丟帧
如果代码中没有调用其他地方的方法则该按钮呈现灰色,无法使用,只有进入深层方法才可使用,我们可能在学习底层源码时,不小心按快了,错过了想看的位置,点击这个按钮,可以回退到调用方法之前,俗称后悔药,但不同于数据库的事务回退,即插入的数据等不会因为方法回退而消失,这里的回退只是因为记录了栈信息才能够做到
7、运行到光标处(Alt + F9)
用的也不多,主要为了快速跳转到光标指向的那一行
8、评估表达式(Alt + F8)
用于计算表达式,用表达式查询对应元素
public class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}public static void main(String[] args) {
//演示 评估表达式
List<User> users = new ArrayList<>();
users.add(new User("张三", "123456"));
users.add(new User("李四", "123456"));
users.add(new User("王五", "123456"));
users.add(new User("赵六", "123456"));
//演示 users.get(0) users.get(3)
System.out.println(users); //在此打入断点
}
}
9、跟踪当前流链
//演示流断点
List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 3, 4, 4, 4, 5, 6, 78));
List<Integer> collect = list.stream()
//先将偶数筛选,再去重,返回集合
.filter(s -> s % 2 == 0)
.distinct()
.collect(Collectors.toList());
10、恢复程序(F9)
跳转到指定的断点处,如果代码中两断点之间的代码不想慢慢步过,可以点击此按钮直接飞跃中间代码步骤到下一个断点
11、终止程序(Ctrl + F2)
这里是停止调试的意思,即调试停止但程序可能还在运行中,若想在停止调试同时让程序停止在此处,可以在方法栈右键Force Return
,即强制返回,再点击恢复程序Resumer Program
,可以直接终止返回,程序在此处停止
12、查看断点(Ctrl + Shift + F8)
基本功能如下,主要用于查看断点信息
13、静音断点
暂时禁用掉断点,方便程序继续运行,一般配合恢复程序
14、存放变量信息
这里是一片区域,这里存放了很多变量信息,方便查看
15、监视变量变化
可以在这里监控变量的变化,这里其实默认是在变量信息栏中,拉出来只是为了方便查看
设置断点调试和断点分类
在IDEA中进行debug操作时,我们需要设置断点。断点是代码执行到某一行时暂停程序执行的标记。在程序的关键位置设置断点,可以帮助我们分析程序的执行过程,定位问题所在。在Java代码中,可以通过单击行号左侧的空白区域设置断点
以下介绍序号根据上图标注顺序讲解
1、属性断点
属性断点打在属性上,会出现小眼睛图标,因为一般使用getter
、setter
方法设值,这样我们就不用在getter
、setter
方法上打断点
2、方法断点
方法断点打在方法上,会出现菱形图标,最好使用在接口方法上,这样当我们调试源码,可直接跳转到对应的实现方法上,不用慢慢去找
3、行断点
普通行断点,打在代码行上,会出现圆形图标,debug运行时会停在此处
4、异常断点
如果程序出现某异常,可以使用异常断点快速定位异常位置,会出现闪电图标,哪里出现停那里
5、条件断点
不想一步步走下去,而是满足某条件时打断点,只需在断点上右键condition
中填写条件,条件满足自动跳到那里
6、流断点
在Jdk1.8后,出现了Stream流新特性,想要在使用流时查看中间的步骤是怎么走的,可以使用流断点,只需要在流条件上添加断点,点击跟踪流链即可查看流的步骤
7、多线程断点
多线程断点的设置只需在断点处右键将挂起设置为线程,在多线程项目中,使用默认All
来调试多线程程序,可能某条线程会没有停留就跑掉了,而使用Thead
这种方式可以捕获到运行的所有线程,精准控制每条线程。且这样带来的好处就是,当运行定时任务时,在调试过程中由于暂停了线程的执行,如果下一个任务到时间了,也不会执行,防止多次定时任务执行带来的干扰
断点调试小技巧
- 推荐使用智能步入:使用
Step Into (Alt + F7)
或者Force Step Into (Alt + Shift + F7)
会根据方法调用顺序依次进入方法内部,比较麻烦。使用智能步入,Smart Step Into (Shift + F7)
会自动定位到当前断点行,并列出需要进入的方法,点击方法进入方法内部 - 使用条件断点来调试:在
Condition
选项中添加条件代码,在代码中定位特定情况下的问题,避免在单步执行中浪费时间 - 设置异常断点来调试:设置需要捕获的异常类型,当该异常被抛出时,程序会自动暂停执行。更快定位异常出现的位置
- 回滚断点回到之前的程序状态:通过回滚断点
Rollback
按钮,选择需要回滚到的历史状态,查找程序执行过程中出现的问题,并暂时回到之前的状态进行分析 - 设置多个断点:更好地掌握程序的执行过程,在一个较大的代码区间中跟踪程序的执行过程,并且在程序的多个阶段中定位问题
- 在调试窗口中选择调试选项:更高效地进行调试操作