简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过debug快速定位问题所在的,但是在IDEA上点击debug按钮后却一直无法正常启动项目,控制台上也能看到日志,但是基本都在几个步骤后无法再继续下去,重复试了几次都无法正常启动项目,日志输出到特定的那几句后就停止了,调试代码也就更无从谈起了。
什么原因导致的?由于是第一次碰到这个问题,所以不太清除到底是什么原因,只记得当时重复的试了几次项目的clean install,但是这几次的重新构建和重新启动的结果都是无效,项目依然无法通过debug模式启动。
我也有点晕了,不过代码肯定是没问题的,因为压根儿就没有改过代码,我心里也觉得应该是一个设置的小问题,只不过我不知道具体是哪里有问题罢了,于是通过run按钮启动项目验证一下,果然启动成功了。这也就说明项目和代码没有任何问题,肯定是IDEA某个设置项的问题,没有设置好或者被我无意间改错了。
接着就是问问同事和朋友有没有遇到过类似问题的,但是他们都说没遇到过,前端同事催的也比较急,毕竟上线最重要,所以也没有纠结这个问题,于是把代码拉到mac上,在mac上进行debug调试,在mac上竟然可以了,这就更尴尬了,到底是什么原因呢?难道是windows系统出毛病了吗...
Method Breakpoints解决了前端同事的接口问题之后,赶紧又折回来搞这个问题,到底是怎么回事!
上网查了一下,发现也有其他朋友遇到过类似问题,解决办法也类似,就是因为在项目中有断点打在了方法上,因此导致的debug变慢。解决方法也简单,将打在方法上的断点去掉即可,于是查了一下自己代码中的断点是不是也有类似的情况,果然,发现了两个打在方法上的断点:
将这几个打在方法上的断点掉之后,控制台立刻开始刷刷刷的打日志了,debug模式下项目无法启动的问题解决掉了。
关于怎么在IDEA中查看所有断点,可参考前一篇文章《Intellij IDEA查看所有断点》
复盘这个问题虽然解决掉了,不过具体原因我依然不是特别清楚,首先是为什么会出现这种情况,更重要的是为什么方法断点会导致项目根本无法启动。
虽然这个事情不大,但是当时的我确实是真切的觉得遇到麻烦了,当时的心里已经觉得不是特别好处理这件事,为什么呢?因为这既不是代码的问题、不是技术方面的问题、也不是业务的问题,怎么说呢,这算是一个突发的问题而且是一个较为意外的问题,更重要的是它困扰了我一段时间,所以我一定要找出原因!
算是花了一天的时间吧,从早上遇到这个情况,之后问了其他同事,但是没有人碰到过类似情况,很囧,到中午解决,再到下午找了半天的原因,现在简单的做一下复盘,并且针对几个想法做一下对比试验。
-
1.为什么出现这种情况?
应该是点击的时候没注意,在方法上点击并且打上了一个断点导致了这个情况,而在mac上没有出现这个问题的原因也清楚了,因为在mac上没有方法断点。 -
2.Method Breakpoints的问题跟系统是不是有关系?
在windows上解决了这个问题后,脑袋里就有了这个想法,Method Breakpoints的问题在windows和mac上是不是都会出现,答案是肯定的,一旦有方法断点都会卡住。 - 3.Method Breakpoints的问题是不是只在接口方法中出现?
因为出问题的那个断点是在接口方法上,所以就有了这个想法,验证后也得到了答案,在实现类上打断点也会出现此问题。
通过对这几个问题的验证,也使我更加清楚了这个问题,Method Breakpoints会使得debug变慢是一个确定的事实,与操作系统的关系不大,与是否为实现类方法也无关联,那么为什么会这样呢?
为什么在方法上打断点会这样呢?一般遇到这种问题都会先到网上查一下,看看是不是有朋友整理了这个答案,但是这个问题并没有,只能自己一点点去查了,在idea的官方文档IntelliJ IDEA Help里有这么一段描述:
注意这么一句话:
总结Note that using method breakpoints can slow down the application you are debugging.
使用方法断点会使得正在debug调试的程序变慢。
针对于此,也向使用IDEA的各位朋友提个建议:少用方法断点,也尽量不要在项目里打过多的断点,调试哪里就在哪里打上,调试完把断掉去掉就好。
到此为止,事件的起因、经过、结果都大致介绍完毕,至于最后这个答案,我觉得我不是特别满意,官方文档里也只是说了一下,这个做法会使debug变慢,但是更深层次的原因或者说原理还需要再去研究研究,现在依然在查一个我自己满意的答案,如果找到了我会再整理一篇文章分享出来。
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中虽不甘心,却又畏首畏尾。
热门评论
我的也出现该问题,但是我查看了并没有打任何断点,但是就是一直debug启动不起来?
直接明了,赞一个,我的也是打断点打在了方法上,去掉就好了