IDEA断点调试技巧,多张动图包教包会。

2023-11-02

一. 怎么开启断点调试?

随着开发的深入,越来越觉得高效的调试方法是多么的重要了,但我们一般上来就是敲一些代码,谁会去静下心来学一些看似没什么用的调试技巧呢?但这恰恰就是新手和老手之间的区别。

断点调试是很简单的,只需要点击idea上方的小虫子,启动调试即可,如下所示。
在这里插入图片描述
这当然不是本文的重点,只是开个头。

二. 调试界面咋那么多按钮?

先来介绍一下界面。在这里插入图片描述
我给这些区域都标了 号,下面来重点介绍。

1.返回断点位置

1号按钮,这个用的不多,如果你从其他地方想要回到断点位置,就按一下即可,如下GIF所示。
在这里插入图片描述

2.步过

2号按钮,说人话就是一行行的往下执行,不会进入方法里面,如下所示。

在这里插入图片描述

3.步入

3号按钮,可以进入我们自定义的方法,如果是其他类库的方法不会进入,如下所示。
在这里插入图片描述

4,5.强制步入,步出

4号5号按钮,前者可以进入深层的方法,包括官方的源码,后者就是从对应的方法中出来,演示如下。

在这里插入图片描述

6.回退断点

6号按钮是很特殊的,如果你的代码中没有调用其他地方的方法,那么是呈灰色的,无法使用,只有进入更深层的方法,才能够使用,其实就是后悔药,我们很多时候调试时不小心按的快了点,很容易错过想看的位置,只能再次重启吗?不,使用这个drop frame 就可以了,演示如下。

可以看到,这里往下执行了add,但是还没有执行完,按这个按钮,再次回到了调用方法之前,但对于数据库插入等操作,其实是无法回退的,这里的回退只是因为记录了栈信息才能够做到的。
在这里插入图片描述

但是要注意,如果你某个方法调用完毕了,你想再回去那就没有办法了。

7.断点跳到光标处

7号按钮也用的不多,主要是为了快速跳转到光标指向的那一行,如下所示。
在这里插入图片描述

8.表达式计算

8号按钮是计算表达式的,我们模拟从数据库获取集合,用表达式查询对应的元素,如下所示。
在这里插入图片描述

9.恢复程序

9号按钮称为 Resume Program,能够跳转到指定的断点处,我们在10行和第100行各加一个断点,需要点几下该按钮跳转到100行呢?答案是一次即可,第一次断点会在第10行停下,点击改按钮直接飞越90行到第100行,如下所示。

在这里插入图片描述

10.停止程序

10号按钮就是停止调试,但是注意,即便停止了调试,程序也会继续运行下去,如何想让他就在断点处停止呢?后面我会说到。

11.查看所有断点

11号按钮打开又别有乾坤,基本功能如下图所示,主要是设置,查看断点信息,大家看着应吧,实用的方法我会在下面讲的。
在这里插入图片描述

12.禁用断点

12号按钮就简单了,暂时禁用掉断点,方便程序继续执行,一般配合 Resume Program

13.其他

13号其实不是按钮,而是一块区域,这里面存放了很多变量的信息,方便我们查看。

14号按钮其实之前被我忽略掉了,这次拿出来讲一下,在watch可以监控变量的变化,有同学说,中间的变量栏也可以看啊,但是单独拉出来,看起来更加的方便,演示如下。
在这里插入图片描述

三. 竟然有那么多调试断点?

这里省略了普通的行断点调试,毕竟是最简单的,大家都会。

1.方法断点

方法断点是不是用在普通方法上的,最好的用法是在接口上使用,当我们在调试源码的时候,如果在接口上打了断点,再往下走,可以直接跳转到实现类的实现方法上,而不需要我们一个个的去找。

案例中,有一个接口DemoInterface,它有两个实现类,让我们看下效果吧,演示如下。

注意,方法断点是一个菱形标志。在这里插入图片描述

在这里插入图片描述
其实可以直接在接口方法上打断点,直接跳转到对应的实现方法的,这里是为了放慢演示速度。

2.属性断点

属性断点是打在属性上的,我们无需再getter setter方法上打断点,在属性上打上断点,就会出现一个小眼睛的标志,如下所示。
在这里插入图片描述
在眼睛上点击右键可以设置。
我们一般是通过getter,setter方法设值的,所以就会在这两个方法上停留。

在这里插入图片描述
看一下GIF演示吧。

在这里插入图片描述

3.异常断点

在线上由于空指针出现了BUG,我们想快速定位到哪里出现了空指针,应该怎么做呢,答案就是,异常断点!演示如下。

注意,异常断点是一个闪电的标志。 在这里插入图片描述
在这里插入图片描述
可以看到,我们在全局打了个空指针断点,只要哪里出现了空指针,就会在那里停止,太方便了!

4.终止断点

前面我们说过,即便停止程序,也不会让我们后面运行的代码取消执行,那么我一定要取消执行可以吗?当然是可以的,演示如,在方法栈上点击右键,有一个Force Return,然后再点击Resumer Program,就可以直接终止返回了。
在这里插入图片描述

5.条件断点

我想要在某个条件满足的时候打上断点,而不想一步步的走下去,有什么办法吗? 当然有,在断点处右击,在condition里填入相应的条件即可,演示如下。
在这里插入图片描述

6.流断点

我们使用流的时候,很难看到中间做了什么,但其实idea就帮我们解决了,我用断点调试下面代码,给大家演示下。

其实只需要找到这个按钮就行了
在这里插入图片描述

 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());

在这里插入图片描述

7.多线程断点

给大家演示两种情况,多线程下调试,定时任务下调试。

这个演示比较简单,可能有同学不以为意,你可以去尝试下,如果使用默认All来调试多线程程序会发生什么,可能某条线程就跑掉了,没有停留,而这种方式可以捕获到运行的所有线程。

在这里插入图片描述

定时任务这样调试有个好处,即便我们在调试的过程中下一个任务也到时间了,也不会执行,防止多次定时任务执行带来的干扰,我在演示前已经提前一分钟启动了程序,每隔10秒钟打印一次,但是由于暂停了线程的执行,多次点击Resumer Program,发现并没有往下执行哦,而是再等了10秒钟之后执行。

在这里插入图片描述

8.远程断点

这个忽略啦,因为确实没有远程打过断点,有时间再补充吧,个人感觉可有可无。

其实我们每个人的生活都是一个世界,即使最平凡的人也要为他生活的那个世界而奋斗。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IDEA断点调试技巧,多张动图包教包会。 的相关文章

  • Spring Data:限制自定义查询的结果

    在我的 Spring 数据存储库中 我 必须 使用自定义查询 Query注解 我知道我可以限制这样的命名查询中的结果数量 Iterable
  • JPA:如何将字符串持久保存到数据库字段中,输入 MYSQL Text

    需求是用户可以写文章 所以我选择typeText为了contentmysql数据库内的字段 我怎样才能转换Java String into MySQL Text 干得好Jim Tough Entity public class Articl
  • 获取TextView的高度

    我有一些文字将被放入TextView 我这样做是使用setText 现在我需要找到文本在文本中占据的行数或高度TextView 我尝试使用getHeight 但它总是返回 0 无论如何 有没有办法获得文本中存在的文本的高度TextView
  • DateTimeFormatter.parseLocalDate 抛出 UnsupportedOperationException

    该API用于解析本地日期 http joda time sourceforge net apidocs org joda time format DateTimeFormatter html parseLocalDate 28java la
  • 根据哈希值确认文件内容

    我需要 检查完整性 content文件数量 文件将写入 CD DVD 可能会被复制多次 这个想法是识别正确复制的副本 在从 Nero 等中删除它们之后 我对此很陌生 但快速搜索表明Arrays hashCode byte http down
  • Jodatime 日期格式

    是否可以格式化 JodaTime 日期 这是代码 private static LocalDate priorDay LocalDate date1 do date1 date1 plusDays 1 while date1 getDayO
  • Ant 无法启动,给出主类错误

    我正在运行 Elementary OS 基于 Ubuntu 12 并且在运行 apache ant 时遇到问题 它在重新启动之前就可以正常工作 所以我不确定会发生什么变化 我在 etc environment 中定义了环境变量 如下所示 P
  • 将多个视频文件合并到一个文件中

    我有多个以相同帧速率和分辨率录制的视频 我想将两个视频合并为一个视频 因此结果文件将是大视频 我正在使用 MP4 解析器 api 并使用下面的代码 Movie countVideo new MovieCreator build Channe
  • 我们必须将 .class 文件放在 Tomcat 目录中的位置

    我必须把我的 class文件在 Tomcat 目录中 在我的 Java Complete Reference 书中 他们告诉将其放入C Program Files Apache Tomcat 4 0 webapps examples WEB
  • Java 7 中 Object 和 int 的比较

    最近我偶然发现了一个问题 让我停下来思考 对我来说 下面的代码应该总是会触发错误 但是当我的一位同事问我为什么 Eclipse 没有显示错误时 我无法回答任何问题 class A public static void main String
  • 在 Java 中使用 Inflater 解压缩 gzip 数据

    我正在尝试使用以下方法解压缩 gzip 数据Inflater 根据文档 如果参数 nowrap 为 true 则 ZLIB 标头和校验和 字段将不会被使用 这提供了与 GZIP 和 PKZIP 使用的压缩格式 注意 使用 nowrap 选项
  • java Runtime.getRunTime().exec 和通配符?

    我正在尝试使用删除垃圾文件 Process p Runtime getRuntime exec 只要我不使用通配符 它 就可以正常工作 即 Process p Runtime getRuntime exec bin rm f specifi
  • java 1.8下无法启动eclipse

    java 1 8 升级后我无法启动 eclipse 附上错误截图 这是我的 eclipse 配置设置 我该如何解决 startup plugins org eclipse equinox launcher 1 3 0 v20120522 1
  • Java .split("|") 不工作

    我刚刚遇到了一个问题分割法 http docs oracle com javase 6 docs api java lang String html split 28java lang String 29for 字符串不适用于字符 作为一个
  • 将变量从 jenkins 传递到 testng.xml

    我想根据从詹金斯传递的变量运行测试用例 例如 选择您要运行的测试用例 测试用例一 测试用例二 在 pom xml maven 中
  • 使用链接列表插入优先级队列的方法

    首先 我觉得我应该提到这是一项作业 我并不是在寻找直接的代码答案 只是为了指出正确的方向 我们被要求在链表中实现优先级队列 我正在努力编写 insert 函数的第一部分 在代码中我尝试检查是否head包含任何内容 如果没有则设置为head
  • Apache Kafka 是否提供异步订阅回调 API?

    我的项目正在将 Apache Kafka 视为老化的基于 JMS 的消息传递方法的潜在替代品 为了让这个过渡尽可能的顺利 如果替代的排队系统 Kafka 有一个异步订阅机制那就更理想了 类似于我们当前项目使用的JMS机制MessageLis
  • Checkstyle - 方法按修饰符排序

    是否可以添加到 checkstyle 规则以按修饰符对类中的方法进行排序 我的意思是开头的公共方法和最后的私有方法 MethodsOrderCheck做这个工作 检查文档 https www qulice com qulice checks
  • 如何隐藏或删除 Android HoneyComb 中的状态栏?

    如何隐藏或删除 Android HoneyComb 中的状态栏 每次运行应用程序时 我都会发现某些内容必须被状态栏覆盖 我尝试改变AndroidManifest xml 但没有任何改变 你不知道 它被认为是永久的屏幕装饰 就像电容式主页 菜
  • 如何在 Servlet 中打开弹出窗口,然后重定向页面

    我想在调用 servlet 时打开一个弹出窗口 然后想将 servlet 重定向到某个 jsp page 这就是我所做的 protected void doGet HttpServletRequest request HttpServlet

随机推荐

  • 初识vue3

    对vue3的理解 2020年9月发布的正式版 vue3支持大多数的Vue2的特性 Vue中设计了一套强大的组合APi代替了Vue2中的option API 复用性更强了 更好的支持TS 最主要 Vue3中使用了Proxy配合Reflect代
  • notepad++中配置python IDE

    操作系统是windows7 notepad 版本是5 9 6 2的安装版 python版本是2 7 2 windows7下的python安装配置在http blog csdn net gabriel1026 article details
  • 《算法和数据结构》数学基础总结

    前言 算法是什么 数学是什么 算法中的数学又是什么 这篇文章 让我来为大家介绍下法中的数学基础 数学可以说是算法的基石 所谓万丈高楼平地起 如若根基不稳 那么再高的楼 也只是豆腐渣工程 随时都有塌陷的可能 所以数学之于算法 可谓 非常重要
  • vmware 虚拟机开机自启动脚本

    1 建立一个txt文件 D VMware VMware Workstation vmrun exe T ws start I Documents Virtual Machines centos centos vmx nogui 注意 如果路
  • Python学习之爬取网页图片(单张)

    import requests import os os 库是Python标准库 包含几百个函数 常用的有路径操作 进程管理 环境参数等 root D pictures url input 请输入图片链接 让用户输入图片链接 path ro
  • 【JVM】JVM内存模型(详细)

    目录 一 JVM概述 1 jvm简介 2 jvm作用 3 jvm的内存模型 二 类加载器 1 类加载器的作用 2 加载器的类型 3 双亲委派机制的运行过程 4 双亲委派机制优缺点 5 为什么要破坏双亲委派机制 6 破坏双亲委派机制的方式 三
  • 函数调用堆栈的过程

    函数在进行调用时会产生开栈和清栈的操作 那么就来介绍一下函数调用堆栈的过程吧 首先 利用一个小例子来研究这个过程 include
  • Android禁止view上下滑动,Android RecyclerView禁止滑动

    在开发时 数组返回数目很少 需求要求不能左右滑动 下面是一种解决方案 1 RecyclerView 为垂直状态 VERTICAL 下 LinearLayoutManager layoutManager new LinearLayoutMan
  • 1929:【04NOIP普及组】火星人

    题干 这道题有好多废话 不过和全排列非常像 全排列题目 所以这道题数字的大小顺序与全排列的默认顺序一模一样 全排列的代码 在这里 本题就是一次次地调用全排列 不愿意麻烦的 就是我 可以用STL 非常方便 代码 100分 include
  • Stream:findFirst()高效简洁遍历集合中的一个元素

    业务开发中会运用到很多的List
  • sonarqube项目按权限分配

    一 创建用户 进入sornarqube的配置中心 选择权限菜单下的用户菜单 然后点击Create User按钮 只要输入登录名 用户名与密码保存后就可以创建一个新用户 二 创建组 选择权限下的群组菜单进入用户组管理页面 点击Create G
  • 时序数据交叉验证方法与python实现

    文章目录 传统N折交叉验证方法 时序数据交叉验证方法 方法1 窗口拆分 方法2 带间隔的窗口拆分 方法3 拓展窗口切分 时序交叉验证python复现 传统N折交叉验证方法 传统的N折交叉验证示意图如下图所示 时序数据交叉验证方法 由于时间序
  • 谨慎对待Go语言中对interface的nil判断

    谨慎对待Go语言中对interface的nil判断 在进行Go语言编程中 我们会看见诸如if err nil 或者if err nil 之类的判断 这跟go语言的错误处理哲学 计划失败而非成功 及早失败 有关 大多数情况下 我们对一个err
  • StringRedisTemplate运行NullPointerException的完全解决

    SpringBoot在使用Redis时出现StringRedisTemplate运行NullPointerException的完全解决 RedisTemplate运行NullPointerException的完全解决 三种解决方法 第一种
  • STM之SD卡

    SD卡基本函数 SPI InitTypeDef结构体 SPI 初始化结构体 1 SD Lowlevel Init 该函数初始化SPI相关外围时钟 配置GPIO引脚 调用SPI Init 初始化SPI InitStructre结构体 gt S
  • Linux下如何安装Anaconda、修改环境变量以及管理环境

    Linux下AI环境的搭建 Anaconda篇 1 第一步 安装anaconda 2 第二步 更改 调整系统环境PATH 3 第三步 创建适当的虚拟 python pip 工作区 3 第四步 如何使用conda来管理不同环境 1 第一步 安
  • java获取客户端操作系统_根据User-Agent,获得客户端浏览器和操作系统的信息

    碰到取客户端浏览器和操作系统信息的问题 网上找了很久 大多都是在页面中嵌入JS实现的 无法满足我的要求 所以 就自己写了个方法 可以在servlet中取到 我是根据每个浏览器User Agent的特征 来判断的 在windows xp中已测
  • 汇编实现排序——希尔排序

    希尔排序是把记录按下标的一定增量分组 对每组使用直接插入排序算法排序 随着增量逐渐减少 每组包含的关键词越来越多 当增量减至1时 整个文件恰被分成一组 算法便终止 以下是汇编实现的代码 S0 SEGMENT STACK DW 20 DUP
  • RabbitMQ学习(四)——高级特性

    RabbitMQ高级特性 1 1 消息的可靠投递 1 1 1 消息发送端 在使用RabbitMQ的时候 作为消息发送方式希望杜绝任何消息丢失或者投递失败的场景 RabbitMQ为我们提供了两种方式用来控制消息的投递可靠性模式 confirm
  • IDEA断点调试技巧,多张动图包教包会。

    文章目录 一 怎么开启断点调试 二 调试界面咋那么多按钮 1 返回断点位置 2 步过 3 步入 4 5 强制步入 步出 6 回退断点 7 断点跳到光标处 8 表达式计算 9 恢复程序 10 停止程序 11 查看所有断点 12 禁用断点 13