关于intellij-idea:玩转-IDEA-花式打断点从此告别-996

40次阅读

共计 1655 个字符,预计需要花费 5 分钟才能阅读完成。

写代码离不开调试,调试离不开断点。

IDEA 对于断点的反对十分丰盛。把握这些技巧当前,能够大大的晋升开发效率。是帮忙程序员保住头发,远离 996 的秘密武器。

断点类型

IDEA 反对以下四种断点类型:

  • 行断点(Line breakpoints):最罕用的一种,能够设置在任意可执行的代码行下面。
  • 办法断点(Method breakpoints):设置在办法签名上,当进入或退出办法时,断点可被唤醒。
  • 字段断点(Field watchpoints):设置在字段(成员变量)上,当该字段被读取或者赋值时断点被唤醒。
  • 异样断点(Exception breakpoints):当抛出指定异样时断点被唤醒。

行断点

行断点,在日常开发中最罕用的形式。增加一个行断点很简略,在须要增加断点的 gutter 上鼠标左键单击,或者光标定位到须要设置断点的代码行,按 Ctrl + F8 即可。

断点增加胜利后,gutter 上会显示一个红色的圆点。接下来,应用 Debug 形式运行程序,就能够对代码进行调试了。

办法断点

办法断点你可能之前没有用过,但如果你有浏览源码的习惯,那么你须要好好利用一下这个就家伙了。

增加办法断点和增加行断点的步骤一样,两者只是外观上有些不同,办法断点用红色的菱形示意。

那么办法断点有什么用呢?举个例子:

有如上类关系,代码实现如下:

public class ServiceImplA implements Service{
    @Override
    public String method() {return "hello A";}
}
public class ServiceImplB implements Service{
    @Override
    public String method() {return "hello B";}
}

有如下调用:

public String hello() {
    // 假如通过看代码很难确定是哪个实现类的实例
    Service service = createService();
    return service.method();}

这个时候,咱们不能一眼看出 service 是 ServiceImplA 的实例,还是 ServiceImplB 的实例(这个例子代码比较简单,像 Spring 这类开源框架要简单很多,看过源码的话都有领会)。

接下来就是办法断点表演的时刻了,在接口 Service 的 method() 上打一个断点:

运行程序,查看成果:

能够看到,hello() 办法中的 service.method() 真正调用的是 ServiceImplA 的 metho() 办法。

另外,办法断点还反对以下配置:

其中,Method entry 和 Method exit 二者至多要抉择一个(如果进入办法和退出办法都不选,那办法断点也就没啥用了)。

字段断点

字段断点也是一个看源码的神器。当一个成员变量被多方援用时,它能够精准的找到谁读取、批改了它的值。

字段断点用一个红色的眼睛示意,堪称是十分形象了。就像给成员变量专门安顿了一个盯梢的人,有什么打草惊蛇第一工夫告诉你。

运行程序,看下成果:

能够看到,精准的定位到 hello 被赋值的地位。

字段断点还反对以下配置:

同样,Field access 和 Field modification 起码选一个。

异样断点

异样断点在咱们修复 bug 的时候很有用。能够精准的定位到产生(指定类型)异样的代码行。

异样断点用一个红色的闪电示意(断点响应当前才会显示)。

应用快捷键 Ctrl + Shift + F8 关上断点治理对话框,按如下步骤进行增加:

设置断点响应的异样类型:

运行程序,查看成果:

能够看到,当产生(指定类型)异样后,程序停在了产生异样的代码行,并在后面放一个红色的闪电,揭示你就是这行代码要搞事件。

断点还反对以下配置:

同样,Caught exception 和 Uncaught exception 起码选一个。

更多玩法

应用快捷键 Ctrl + Shift + F8 关上断点治理对话框,能够解锁更多断点的玩法:

比方能够设置断点在满足指定条件时才响应:

更多玩法留给你去摸索。

断点图标

上面是 IDEA 中各种类型断点在不同状态下的图标示意:

正文完
 0