项目无法启动了

简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过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. 大数相加(类似杭电acm1002)

    /*输入两个非常大的整数(完全超出了int.long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果.*/ //自己用题目所给的案例测试,输出是正确的,也能输出正确的结果,不 ...

  2. POJ - 2253 Frogger 单源最短路

    题意:给定n个点的坐标,问从第一个点到第二个点的最小跳跃范围.d(i)表示从第一个点到达第i个点的最小跳跃范围. AC代码 #include <cstdio> #include <c ...

  3. uva140

    全排列回溯剪枝. 题目数据很水.记录当前最小带宽,边回溯边计算当前序列最大的距离(也就是带宽),如果当前带宽超过了当前的最小带宽就剪枝. 注意下,数据读入时的字符串处理. AC代码 #include& ...

  4. Docker系统四:Dcoker的镜像管理

    1. Dcoker镜像初识 $ docker images -a //查看当前所有镜像 REPOSITORY TAG IMAGE ID CREATED SIZE cptactionhank/atlas ...

  5. JVM笔记5-对象的访问定位。

    java虚拟机中指定一个栈内存的引用指向了堆内存中的对象.这样说只是笼统的说法.而指向堆内存中的对象就一定是栈引用所需要的那个对象吗?其实并不定. 这就需要知道对象的访问定位方式有两种: 1.使用句柄 ...

  6. php 变量原理讲解

    php 变量原理讲解 一.变量概念   所谓变量,是指在程序中其值可以变化的量. 程序是管理和处理数据的.在程序运行过程中,我们需要存贮这些数据,变量和常量就是用于保存程序运行时的数据的. 变量通常由 ...

  7. 【java学习笔记】反射基础

    一.反射 反射就是在剖析一个类,了解这个类的构造,创建这个类对应的对象. Class 代表字节码的类,代表类的类 Field 代表属性的类 Method 代表方法的类 Constructor 代表构造 ...

  8. flask中jinjia2模板引擎详解4

    接上文 For循环 和其它编程语言一样,for用来编辑列表中的项.下面以一个例子来说明for在flask的jinjia2模板中的使用. 创建一个模板list.html 代码如下{% extends & ...

  9. (转)Hanoi塔问题分析

    转自:http://shmilyaw-hotmail-com.iteye.com/blog/2077098 简介 关于Hanoi塔问题的分析,在网上的文章都写烂了.之所以打算写这篇文章,更多的是针对这 ...

  10. 使用mongoVUE删除大量数据的情况下失效问题

    昨天有一个系统出现了问题,导致半夜时大量的错误数据产生,早晨一早接到上边通知让把这些数据尽数删除. 不可否认在数据操作时mongoVUE更加直观,因此一般情况下我也都是使用这个工具,但是今天却出现了问 ...