项目无法启动了

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

首发于我的个人博客,感谢大家支持。

Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录的更多相关文章

  1. intelliJ idea debug模式下启动慢的原因

    今天在idea上以debug方式启动项目的时候,特别慢,启动半天启动不起来,一直以为是数据库连接的原因,但重启mysql服务后也不好使,特别郁闷... 最后发现原来是之前调试的时候加的断点还在,导致启 ...

  2. idea 项目在一般模式下可以正常启动,在debug模式下无法启动,像是卡住了的感觉

    项目一般模式下可以启动,debug模式下就是启动不了,后经过排查发现打的有断点,断点取消在重启立马就可以啦. Method breakpoints may dramatically slow down ...

  3. Myeclipse在debug模式下没加断点程序卡住,start模式下可以正常启动

    参考<eclipse在debug模式下卡住,start模式下可以启动>,地址:https://blog.csdn.net/jack_chen1994/article/details/761 ...

  4. eclipse的debug模式下启动不了tomcat

    使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat. 这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动to ...

  5. IDEA Debug模式下启动慢的解决办法

    工程没有做什么大的改动,近期Idea在debug模式下启动耗时800s +,run模式下200s.Idea debug模式启动的时候会有这样的提示: 方法断点会戏剧性的降低debug的速度.当时并没有 ...

  6. 在debug模式下引入一些性能检测工具

    我们经常在debug模式下使用一些性能检测工具,例如blockCannary,leakCannary.Stetho等,但是我们release的时候又不需要这些检测工具,通常情况下我们的做法是在buil ...

  7. 引入 Tinker 之后如何在 Debug 模式下开启 Instant Run

    在<Tinker + Bugly + Jenkins 爬坑之路>一文中讲了在接入 Tinker 之后,Jenkins 中的一些坑,由此,热修复算告一段落,但是,在直接 Run 模式运行时, ...

  8. Django -&gt; debug模式下的静态文件服务(/media/)

    正式公布django项目的时候,假设存在静态文件(通常会统一放在名称为media或static的文件夹下),则须要建立url到文件系统的映射,比如.使用nginx的时候我们须要进行这种配置. # Dj ...

  9. Debug模式下编译溢出问题

    问题: 代码在Debug模式下编译报出内存溢出的错误,而Release模式下则没有. 由于Debug模式下包含调试信息,并且不作任何优化.而Release模式进行了各种优化,内存检测等操作均省去,使得 ...

随机推荐

  1. FineUIPro控件库深度解析

    FineUIPro控件库 FineUIPro是一套基于jQuery的专业ASP.NET控件库,始于2008年的开源版FineUI控件库. 当年为了提升项目的开发效率,降低代码复杂度,减少对CSS和Ja ...

  2. ubuntu常用命令操作

    建立文件夹软链接 ln -s 源文件 目标文件 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下 ...

  3. 多线程编程学习笔记——异步调用WCF服务

    接上文 多线程编程学习笔记——使用异步IO 接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端 接上文 多线程编程学习笔记——异步操作数据库 本示例描述了如何创建一个WCF服务,并宿主 ...

  4. java Socket实现简单在线聊天(三)

    在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊. 在实 ...

  5. mysql数据库字符集编码查看以及设置

      show variables like %char% character_set_client     | gb2312                           character_s ...

  6. Java获取当前的日期和时间

    Java获取当前的日期和时间 1.具体实现方法如下 /** * @Title:DateTime.java * @Package:com.you.model * @Description:获取当前的日期 ...

  7. java.lang.IllegalArgumentException: Document base E:\Eclipse\workspace\.metadata\.plugins\org.eclips

    1.错误描述 四月 13, 2015 5:56:55 下午 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based A ...

  8. Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContextAware

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  9. (十四)java中super和this

    super代表的是父类.超类,用在继承中的子类中:this代表对象本身,用在本类中.     super访问的是被子类隐藏的父类的属性或被覆盖的方法,而this访问的是同一类中的成员.     sup ...

  10. windows驱动之WDF---CharSample

    驱动程序部分: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) /*++ ...