1. 程式人生 > >Intellij IDEA debug模式下專案啟動慢/無法啟動的事件解決過程記錄

Intellij IDEA debug模式下專案啟動慢/無法啟動的事件解決過程記錄

專案無法啟動了

簡單的介紹一下事件過程:週一的早上,收到前端同事拋過來的一個任務,說是一個介面無法正常返回資料,於是就讓他把引數發過來,我想試著在本地重現一下並且將問題修復掉,這種情況肯定是要通過debug快速定位問題所在的,但是在IDEA上點選debug按鈕後卻一直無法正常啟動專案,控制檯上也能看到日誌,但是基本都在幾個步驟後無法再繼續下去,重複試了幾次都無法正常啟動專案,日誌輸出到特定的那幾句後就停止了,除錯程式碼也就更無從談起了。

mengbi

什麼原因導致的?

由於是第一次碰到這個問題,所以不太清除到底是什麼原因,只記得當時重複的試了幾次專案的clean install,但是這幾次的重新構建和重新啟動的結果都是無效,專案依然無法通過debug模式啟動。

我也有點暈了,不過程式碼肯定是沒問題的,因為壓根兒就沒有改過程式碼,我心裡也覺得應該是一個設定的小問題,只不過我不知道具體是哪裡有問題罷了,於是通過run按鈕啟動專案驗證一下,果然啟動成功了。這也就說明專案和程式碼沒有任何問題,肯定是IDEA某個設定項的問題,沒有設定好或者被我無意間改錯了。

接著就是問問同事和朋友有沒有遇到過類似問題的,但是他們都說沒遇到過,前端同事催的也比較急,畢竟上線最重要,所以也沒有糾結這個問題,於是把程式碼拉到mac上,在mac上進行debug除錯,在mac上竟然可以了,這就更尷尬了,到底是什麼原因呢?難道是windows系統出毛病了嗎…

Method Breakpoints

解決了前端同事的介面問題之後,趕緊又折回來搞這個問題,到底是怎麼回事!

上網查了一下,發現也有其他朋友遇到過類似問題,解決辦法也類似,就是因為在專案中有斷點打在了方法上,因此導致的debug變慢。解決方法也簡單,將打在方法上的斷點去掉即可,於是查了一下自己程式碼中的斷點是不是也有類似的情況,果然,發現了兩個打在方法上的斷點:

log

將這幾個打在方法上的斷點掉之後,控制檯立刻開始刷刷刷的打日誌了,debug模式下專案無法啟動的問題解決掉了。
Method Breakpoints

關於怎麼在IDEA中檢視所有斷點,可參考前一篇文章《Intellij IDEA檢視所有斷點

覆盤

這個問題雖然解決掉了,不過具體原因我依然不是特別清楚,首先是為什麼會出現這種情況,更重要的是為什麼方法斷點會導致專案根本無法啟動。

雖然這個事情不大,但是當時的我確實是真切的覺得遇到麻煩了,當時的心裡已經覺得不是特別好處理這件事,為什麼呢?因為這既不是程式碼的問題、不是技術方面的問題、也不是業務的問題,怎麼說呢,這算是一個突發的問題而且是一個較為意外的問題,更重要的是它困擾了我一段時間,所以我一定要找出原因!

算是花了一天的時間吧,從早上遇到這個情況,之後問了其他同事,但是沒有人碰到過類似情況,很囧,到中午解決,再到下午找了半天的原因,現在簡單的做一下覆盤,並且針對幾個想法做一下對比試驗。

  • 1.為什麼出現這種情況?
    應該是點選的時候沒注意,在方法上點選並且打上了一個斷點導致了這個情況,而在mac上沒有出現這個問題的原因也清楚了,因為在mac上沒有方法斷點。

  • 2.Method Breakpoints的問題跟系統是不是有關係?
    在windows上解決了這個問題後,腦袋裡就有了這個想法,Method Breakpoints的問題在windows和mac上是不是都會出現,答案是肯定的,一旦有方法斷點都會卡住。

  • 3.Method Breakpoints的問題是不是隻在介面方法中出現?
    因為出問題的那個斷點是在介面方法上,所以就有了這個想法,驗證後也得到了答案,在實現類上打斷點也會出現此問題。

通過對這幾個問題的驗證,也使我更加清楚了這個問題,Method Breakpoints會使得debug變慢是一個確定的事實,與作業系統的關係不大,與是否為實現類方法也無關聯,那麼為什麼會這樣呢?

為什麼在方法上打斷點會這樣呢?

一般遇到這種問題都會先到網上查一下,看看是不是有朋友整理了這個答案,但是這個問題並沒有,只能自己一點點去查了,在idea的官方文件IntelliJ IDEA Help裡有這麼一段描述:

method-breakpoint-doc

注意這麼一句話:

Note that using method breakpoints can slow down the application you are debugging.

使用方法斷點會使得正在debug除錯的程式變慢。

總結

針對於此,也向使用IDEA的各位朋友提個建議:少用方法斷點,也儘量不要在專案裡打過多的斷點,除錯哪裡就在哪裡打上,除錯完把斷掉去掉就好。

到此為止,事件的起因、經過、結果都大致介紹完畢,至於最後這個答案,我覺得我不是特別滿意,官方文件裡也只是說了一下,這個做法會使debug變慢,但是更深層次的原因或者說原理還需要再去研究研究,現在依然在查一個我自己滿意的答案,如果找到了我會再整理一篇文章分享出來。

首發於我的個人部落格,感謝大家支援。

end