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