写代码离不开调试,调试离不开断点。IDEA对断点的支持非常丰富。掌握了这些技巧后,可以大大提高开发效率。是帮助程序员留头发,远离996的秘密武器。断点类型IDEA支持以下四种断点:行断点:最常用的一种,可以设置在任意可执行代码行上。方法断点(Methodbreakpoints):设置在方法签名上,当进入或退出方法时,断点可以被唤醒。字段观察点:设置在一个字段(成员变量)上,当字段被读取或赋值时断点被唤醒。异常断点:当抛出指定的异常时,断点被唤醒。行断点行断点是日常开发中最常用的方法。添加行断点非常简单。在需要添加断点的gutter上单击鼠标左键,或者将光标定位在需要设置断点的代码行上,按Ctrl+F8。添加断点成功后,gutter上会显示一个红点。接下来使用Debug模式运行程序,就可以对代码进行调试了。方法断点你以前可能没有用过方法断点,但是如果你有阅读源码的习惯,那你就要好好利用这个家伙了。添加方法断点的步骤与添加行断点相同,两者在外观上略有不同,方法断点用红色菱形表示。那么方法断点有什么用呢?例如:上面的类关系,代码实现如下:publicclassServiceImplAimplementsService{@OverridepublicStringmethod(){return"helloA";}}publicclassServiceImplBimplementsService{@OverridepublicStringmethod(){return"helloB";}}有如下调用:publicStringhello(){//假设通过看代码很难判断是哪个实现类实例Serviceservice=createService();returnservice.method();}这个时候,我们无法一眼看出服务是ServiceImplA还是ServiceImplB的实例(这个例子的代码比较简单,Spring之类的开源框架就复杂多了,看完源码就可以理解了)。接下来就是方法断点表演的时间了。在接口Service的method()上打断点:运行程序,查看效果:可以看到hello()方法中的service.method()实际上调用了ServiceImplA的metho()方法。另外,方法断点还支持以下配置:其中,必须选择Methodentry和Methodexit中的至少一种(如果entrymethod和exitmethod均未选择,则方法断点无用)。字段断点字段断点也是查看源码的神器。当一个成员变量被多方引用时,它可以准确地找出谁读取和修改了它的值。字段断点用红色的眼睛表示,非常形象。就好像给成员变量分配了一个stalker,一旦有什么麻烦谁会第一时间通知你。运行程序看看效果:可以看到hello赋值的位置正好定位到了。Fieldbreakpoints也支持以下配置:同样,选择Fieldaccess和Fieldmodification中的至少一项。异常断点当我们修复错误时,异常断点很有用。可以精确定位异常(指定类型)发生的代码行。异常断点由红色闪电表示(仅在断点响应后显示)。使用快捷键Ctrl+Shift+F8打开断点管理对话框,按以下步骤添加:设置断点响应的异常类型:运行程序,查看效果:可以看到当出现异常时(specifiedtype)occurs,programstops在异常发生的那行代码前面放一个红色的闪电,提醒你这行代码要做什么事。Breakpoints也支持以下配置:同样,至少选择Caughtexception和Uncaughtexception之一。更多玩法使用快捷键Ctrl+Shift+F8打开断点管理对话框,可以解锁更多断点玩法:比如可以设置断点只在满足指定条件时才响应:更多玩法玩都留给你去探索。断点图标下方是IDEA中不同状态的各种断点的图标:
