项目无法启动了
简单的介绍一下事件过程: 周一的早上, 收到前端同事抛过来的一个任务, 说是一个接口无法正常返回数据, 于是就让他把参数发过来, 我想试着在本地重现一下并且将问题修复掉, 这种情况肯定是要通过 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 变慢, 但是更深层次的原因或者说原理还需要再去研究研究, 现在依然在查一个我自己满意的答案, 如果找到了我会再整理一篇文章分享出来
来源: https://www.cnblogs.com/han-1034683568/p/8603588.html