Intellij IDEA debug模式下項目啓動慢/沒法啓動的事件解決過程記錄 項目沒法啓動了

簡單的介紹一下事件過程:週一的早上,收到前端同事拋過來的一個任務,說是一個接口沒法正常返回數據,因而就讓他把參數發過來,我想試着在本地重現一下而且將問題修復掉,這種狀況確定是要經過debug快速定位問題所在的,可是在IDEA上點擊debug按鈕後卻一直沒法正常啓動項目,控制檯上也能看到日誌,可是基本都在幾個步驟後沒法再繼續下去,重複試了幾回都沒法正常啓動項目,日誌輸出到特定的那幾句後就中止了,調試代碼也就更無從談起了。html

mengbi

什麼緣由致使的?

因爲是第一次碰到這個問題,因此不太清除究竟是什麼緣由,只記得當時重複的試了幾回項目的clean install,可是這幾回的從新構建和從新啓動的結果都是無效,項目依然沒法經過debug模式啓動。前端

我也有點暈了,不過代碼確定是沒問題的,由於壓根兒就沒有改過代碼,我內心也以爲應該是一個設置的小問題,只不過我不知道具體是哪裏有問題罷了,因而經過run按鈕啓動項目驗證一下,果真啓動成功了。這也就說明項目和代碼沒有任何問題,確定是IDEA某個設置項的問題,沒有設置好或者被我無心間改錯了。windows

接着就是問問同事和朋友有沒有遇到過相似問題的,可是他們都說沒遇到過,前端同事催的也比較急,畢竟上線最重要,因此也沒有糾結這個問題,因而把代碼拉到mac上,在mac上進行debug調試,在mac上居然能夠了,這就更尷尬了,究竟是什麼緣由呢?難道是windows系統出毛病了嗎...app

Method Breakpoints

解決了前端同事的接口問題以後,趕忙又折回來搞這個問題,究竟是怎麼回事!ide

上網查了一下,發現也有其餘朋友遇到過相似問題,解決辦法也相似,就是由於在項目中有斷點打在了方法上,所以致使的debug變慢。解決方法也簡單,將打在方法上的斷點去掉便可,因而查了一下本身代碼中的斷點是否是也有相似的狀況,果真,發現了兩個打在方法上的斷點:idea

log

將這幾個打在方法上的斷點掉以後,控制檯馬上開始刷刷刷的打日誌了,debug模式下項目沒法啓動的問題解決掉了。
Method Breakpointsspa

關於怎麼在IDEA中查看全部斷點,可參考前一篇文章《Intellij IDEA查看全部斷點操作系統

覆盤

這個問題雖然解決掉了,不過具體緣由我依然不是特別清楚,首先是爲何會出現這種狀況,更重要的是爲何方法斷點會致使項目根本沒法啓動。debug

雖然這個事情不大,可是當時的我確實是真切的以爲遇到麻煩了,當時的內心已經以爲不是特別好處理這件事,爲何呢?由於這既不是代碼的問題、不是技術方面的問題、也不是業務的問題,怎麼說呢,這算是一個突發的問題並且是一個較爲意外的問題,更重要的是它困擾了我一段時間,因此我必定要找出緣由!調試

算是花了一天的時間吧,從早上遇到這個狀況,以後問了其餘同事,可是沒有人碰到過相似狀況,很囧,到中午解決,再到下午找了半天的緣由,如今簡單的作一下覆盤,而且針對幾個想法作一下對比試驗。

  • 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變慢,可是更深層次的緣由或者說原理還須要再去研究研究,如今依然在查一個我本身滿意的答案,若是找到了我會再整理一篇文章分享出來。

相關文章
相關標籤/搜索