文章插图
写代码离不开调试,调试离不开断点 。
IDEA 对于断点的支持非常丰富 。掌握这些技巧以后,可以大大的提升开发效率 。是帮助程序员保住头发,远离 996 的秘密武器 。
断点类型
IDEA 支持以下四种断点类型:
- 行断点(Line breakpoints):最常用的一种,可以设置在任意可执行的代码行上面 。
- 方法断点(Method breakpoints):设置在方法签名上,当进入或退出方法时,断点可被唤醒 。
- 字段断点(Field watchpoints):设置在字段(成员变量)上,当该字段被读取或者赋值时断点被唤醒 。
- 异常断点(Exception breakpoints):当抛出指定异常时断点被唤醒 。
行断点
行断点,在日常开发中最常用的方式 。添加一个行断点很简单,在需要添加断点的 gutter 上鼠标左键单击,或者光标定位到需要设置断点的代码行,按 Ctrl + F8 即可 。
文章插图
行断点
断点添加成功后,gutter 上会显示一个红色的圆点 。接下来,使用 Debug 方式运行程序,就可以对代码进行调试了 。
方法断点
方法断点你可能之前没有用过,但如果你有阅读源码的习惯,那么你需要好好利用一下这个家伙了 。
文章插图
方法断点
添加方法断点和添加行断点的步骤一样,两者只是外观上有些不同,方法断点用红色的菱形表示 。
那么方法断点有什么用呢?举个例子:
文章插图
类图
有如上类关系,代码实现如下:
public class ServiceImplA implements Service{@Overridepublic String method() {return "hello A";}}public class ServiceImplB implements Service{@Overridepublic 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 打开断点管理对话框,按如下步骤进行添加:
推荐阅读
- 使用IDEA连接ClickHouse OLAP数据库
- IDEA 安装和使用Kafka 可视化管理插件Kafkalytic
- 10分钟学会用Python轻松玩转Excel
- 普洱茶花式饮用法,水煎普洱茶的功效
- ebay流量入口?ebay促销方式
- 玩转手机自动化测试
- QQ群运营技巧,教你如何玩转QQ群!
- 外贸人必须掌握的六大视频营销方法,玩转五大平台
- 使用IDEA搭建Spark源码阅读环境
- 一招同步 IDEA 个人配置