• IDEA断点调试技巧


    1 怎么开启断点调试

    在这里插入图片描述

    2 调试界面咋那么多按钮

    2.1 返回断点位置

    在这里插入图片描述

    2.2 步过

    在这里插入图片描述

    2.3 步入

    在这里插入图片描述

    2.4 强制步入,步出

    在这里插入图片描述

    2.6 回退断点

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

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

    在这里插入图片描述

    2.7 断点跳到光标处

    主要是为了快速跳转到光标指向的那一行,如下所示
    在这里插入图片描述

    2.8 表达式计算

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

    2.9 恢复程序

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

    2.10 查看所有断点

    主要是设置,查看断点信息,大家看着应吧,实用的方法我会在下面讲的。
    在这里插入图片描述

    2.11 其他

    在watch可以监控变量的变化,有同学说,中间的变量栏也可以看啊,但是单独拉出来,看起来更加的方便,演示如下。

    在这里插入图片描述

    3 调试断点

    3.1 方法断点

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

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

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

    3.2 属性断点

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

    我们一般是通过getter,setter方法设值的,所以就会在这两个方法上停留。
    在这里插入图片描述
    在这里插入图片描述

    3.3 异常断点

    在线上由于空指针出现了BUG,我们想快速定位到哪里出现了空指针,应该怎么做呢,答案就是,异常断点!演示如下。
    在这里插入图片描述
    注意,异常断点是一个闪电的标志。
    在这里插入图片描述
    可以看到,我们在全局打了个空指针断点,只要哪里出现了空指针,就会在那里停止,太方便了!

    3.4 终止断点

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

    3.5 条件断点

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

    3.6 流断点

    我们使用流的时候,很难看到中间做了什么,但其实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());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    3.7 多线程断点

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

    这个演示比较简单,可能有同学不以为意,你可以去尝试下,如果使用默认All来调试多线程程序会发生什么,可能某条线程就跑掉了,没有停留,而这种方式可以捕获到运行的所有线程。
    在这里插入图片描述
    定时任务这样调试有个好处,即便我们在调试的过程中下一个任务也到时间了,也不会执行,防止多次定时任务执行带来的干扰,我在演示前已经提前一分钟启动了程序,每隔10秒钟打印一次,但是由于暂停了线程的执行,多次点击Resumer Program,发现并没有往下执行哦,而是再等了10秒钟之后执行。
    在这里插入图片描述

  • 相关阅读:
    Mpeg-Mesylate/Metronidazole/Niacin 甲氧基聚乙二醇-甲磺酸酯/甲硝唑/烟酸
    按照指定条件对数据进行分组并对每个分组内的全部数据应用自定义函数进行聚合计算groupby().apply()
    Linux:进程间通信
    直播案例剖析:手机降频对直播声音体验的影响
    JVM 对象的内存布局
    软考高项-IT部分
    第一个2DGodot游戏-从零开始-逐步解析
    Unix环境高级编程--8-进程控制---8.1-8.2进程标识-8.3fork函数-8.4 vfork函数
    VBS脚本、BAT批处理脚本大公开,功能强大,简单易用 —— 定时执行专家
    八股——const 关键字
  • 原文地址:https://blog.csdn.net/qq_37705525/article/details/126601684