关于IDEA调试的一些基本操作

一. 怎么开启断点调试?

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

断点调试是很简单的,只需要点击idea上方的小虫子,启动调试即可,如下所示。

关于IDEA调试的一些基本操作这当然不是本文的重点,只是开个头。

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

先来介绍一下界面。

关于IDEA调试的一些基本操作我给这些区域都标了号,下面来重点介绍。

1.返回断点位置

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

关于IDEA调试的一些基本操作

2.步过

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

关于IDEA调试的一些基本操作

3.步入

3号按钮,可以进入我们自定义的方法,如果是其他类库的方法不会进入,如下所示。

关于IDEA调试的一些基本操作

4、5.强制步入,步出

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

关于IDEA调试的一些基本操作

6.回退断点

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

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

关于IDEA调试的一些基本操作但是要注意,如果你某个方法调用完毕了,你想再回去那就没有办法了。

7.断点跳到光标处

7号按钮也用的不多,主要是为了快速跳转到光标指向的那一行,如下所示。

关于IDEA调试的一些基本操作

8.表达式计算

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

关于IDEA调试的一些基本操作

9.恢复程序

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

关于IDEA调试的一些基本操作

10.停止程序

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

11.查看所有断点

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

关于IDEA调试的一些基本操作

12.禁用断点

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

13.其他

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

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

关于IDEA调试的一些基本操作

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

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

1.方法断点

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

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

关于IDEA调试的一些基本操作注意,方法断点是一个菱形标志。

关于IDEA调试的一些基本操作

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

2.属性断点

属性断点是打在属性上的,我们无需再 getter setter方法上打断点,在属性上打上断点,就会出现一个小眼睛的标志,如下所示。

关于IDEA调试的一些基本操作在眼睛上点击右键可以设置。

我们一般是通过getter,setter方法设值的,所以就会在这两个方法上停留。

关于IDEA调试的一些基本操作看一下GIF演示吧。

关于IDEA调试的一些基本操作

3.异常断点

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

关于IDEA调试的一些基本操作注意,异常断点是一个闪电的标志。

关于IDEA调试的一些基本操作

可以看到,我们在全局打了个空指针断点,只要哪里出现了空指针,就会在那里停止,太方便了!

4.终止断点

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

关于IDEA调试的一些基本操作

5.条件断点

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

关于IDEA调试的一些基本操作

6.流断点

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

其实只需要找到这个按钮就行了

关于IDEA调试的一些基本操作
 List list = new ArrayList<>(Arrays.asList(1, 3, 3, 4, 4, 4, 5, 6, 78));
        List collect = list.stream()
          //先将偶数筛选,再去重,返回集合
                .filter(s -> s % 2 == 0)
                .distinct()
                .collect(Collectors.toList());

关于IDEA调试的一些基本操作

7.多线程断点

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

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

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

关于IDEA调试的一些基本操作

8.远程断点

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

Original: https://www.cnblogs.com/galaxyStar/p/16749403.html
Author: Galaxy不写bug
Title: 关于IDEA调试的一些基本操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622086/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Android 虚拟机总结

    标记出不需要回收的对象,清除没有被标记的对象,它是最基础的收集算法,后续的算法都是对其的不足进行改进。 标记后会产生大量不连续的内存碎片。 将操作区域分为两块,每次只使用一块,当内…

    Java 2023年6月7日
    081
  • 面试突击56:聚簇索引和非聚簇索引有什么区别?

    在 MySQL 默认引擎 InnoDB 中,索引大致可分为两类:聚簇索引和非聚簇索引,它们的区别也是常见的面试题,所以我们今天就来盘它们。 聚簇索引 聚簇索引(Clustered …

    Java 2023年5月29日
    077
  • Hyperledger Fabric 2.x 动态更新智能合约

    一、说明 在上一篇文章中分享了智能合约的安装与使用,如果业务有变更代码需要修改怎么办呢?本文分享如何对已安装的合约进行版本更新。 二、环境准备 区块链网络安装:《Hyperledg…

    Java 2023年6月6日
    074
  • 面试官:@Autowired, @Resource, @Inject 三个注解的区别?一下懵了。。。

    作者:Richard_Yi来源:juejin.cn/post/6844904056230690824 前言 本章的内容主要是想探讨我们在进行Spring 开发过程当中,关于依赖注入…

    Java 2023年6月15日
    065
  • Java中private、protected、public和default的区别

    public: 具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。 protected: 主要…

    Java 2023年5月29日
    088
  • 提高 nginx 服务器 安全性,稳定性、性能 –经验总结-持续更新

    在日常工作中使用nginx遇到的问题总结: *保持Nginx的及时升级 因为通过查看官方的release note会发现修复了很多bug,不及时更新在生产环境会有更大的风险 去掉不…

    Java 2023年5月30日
    099
  • Java认证授权框架Spring Security介绍

    Spring Security 是一个非常强大的身份验证和授权控制框架。为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过简单的调整配置,就能为我们的应用提供一套可…

    Java 2023年5月29日
    098
  • 20220728-在IDEA中进行Java的断点调试Debug

    断点调试介绍 断点调试是指在程序的某一行设置一个断点,在调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行…

    Java 2023年6月15日
    091
  • idea快捷键

    常用快捷键 https://mp.weixin.qq.com/s/-rB1AdCRUkryhKcdb96heg Original: https://www.cnblogs.com/…

    Java 2023年6月7日
    072
  • 两万字!多线程50问!

    前言 大家好,我是 捡田螺的小男孩。金九银十快要来了,整理了50道多线程并发面试题,大家可以点赞、收藏起来,慢慢品!~ github地址,麻烦给个star鼓励一下,感谢感谢 公众号…

    Java 2023年6月5日
    086
  • nginx重新整理——————nginx 模块[十]

    前言 简单介绍一下nginx的模块。 正文 https://nginx.org/en/docs/ 这里面可以看到官方模块。 比如打开这个模块: https://nginx.org/…

    Java 2023年5月30日
    065
  • 分布式电商营销系统的实践之路:抽象规则

    前言 去年供职于一家电商公司,被分配到做商城营销体系的开发设计。本文章记录了我这个小菜鸟在营销设计中遇到的坑坑洼洼,以及在重构中的思路。 线性思维,线性设计 首先我们列一列营销组件…

    Java 2023年6月5日
    085
  • Discuz论坛 自动加好友留言程序

    这次不同,想要在论坛发消息首先是要登录的,所以必须要一个账号,接着是让爬虫登录,这是最重要的一个步骤,登录后获取Cookie存储,在加好友发消息的时候都要用到Cookie。 在开发…

    Java 2023年6月9日
    066
  • 你文件乱码了么

    之前对文件的编码,解码一直停留在很抽象的层面,就想着各种编码方式,什么gbk,utf8,ascii等等,然后什么方式编码,就用什么方式解码,比较模糊的,而且项目中uft8编码无处不…

    Java 2023年6月6日
    095
  • MyBatisPlus 入门教程,这篇很赞

    在之前的文章中我们经常使用MybatisPlus进行增删改查,可能有些小伙伴对mybatisplus不是很熟悉,今天特意出了一般入门级的教程,我自己也是一边学习一边写的,有什么地方…

    Java 2023年6月8日
    088
  • 错误记录:Can’t connect to MySQL server on xxx

    由于之前Django项目的mysql的3306端口直接映射到宿主机的3306端口最近安装的其他服务, 发现3306端口冲突, 就把原本Django项目的mysql服务的端口修改, …

    Java 2023年6月7日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球