項目無法啟動了
簡單的介紹一下事件過程:周一的早上,收到前端同事拋過來的一個任務,說是一個接口無法正常返回數據,於是就讓他把參數發過來,我想試着在本地重現一下並且將問題修復掉,這種情況肯定是要通過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變慢,但是更深層次的原因或者說原理還需要再去研究研究,現在依然在查一個我自己滿意的答案,如果找到了我會再整理一篇文章分享出來。
首發於我的個人博客,感謝大家支持。

