IntelliJ IDEA 調試真香技巧

來源:http://dwz.date/efhA

一、條件斷點

循環中經常用到這個技巧,比如:遍歷1個大List的過程中,想讓斷點停在某個特定值。

條件斷點

參考上圖,在斷點的位置,右擊斷點旁邊的小紅點,會出來一個界面,在Condition這裏填入斷點條件即可,這樣調試時,就會自動停在i=10的位置。

條件斷點

二、回到"上一步"

該技巧最適合特別複雜的方法套方法的場景,好不容易跑起來,一不小心手一抖,斷點過去了,想回過頭看看剛纔的變量值,如果不知道該技巧,只能再跑一遍。

退回上一步

參考上圖,method1方法調用method2,當前斷點的位置j=100,點擊上圖紅色箭頭位置的Drop Frame圖標後,時間穿越了

退回上一步

回到了method1剛開始調用的時候,變量i變成了99,沒毛病吧,老鐵們,是不是很6 :)

注:好奇心是人類進步的階梯,如果想知道爲啥這個功能叫Drop Frame,而不是類似Back To Previous 之類的,可以去翻翻JVM的書,JVM內部以棧幀爲單位保存線程的運行狀態,drop frame即扔掉當前運行的棧幀,這樣當前“指針”的位置,就自然到了上一幀的位置。

三、多線程調試

多線程同時運行時,誰先執行,誰後執行,完全是看CPU心情的,無法控制先後,運行時可能沒什麼問題,但是調試時就比較麻煩了,最明顯的就是斷點亂跳,一會兒停這個線程,一會兒停在另一個線程,比如下圖:

如果想希望下一個斷點位置是第2句詩句,可能要失望了:

如果想讓線程在調試時,想按自己的願意來,讓它停在哪個線程就停在哪個線程,可以在圖中3個斷點的小紅點上右擊,

即:Suspend掛起的條件是按每個線程來,而非All。把這3個斷點都這麼設置後,再來一發試試

注意上圖中的紅框位置,斷點停下來時,這個下拉框可以看到各個線程(注:給線程起個容易識別的名字是個好習慣!),我們可以選擇線程“天空中的飛鳥”

斷點如願停在了第2句詩。

四、遠程調試

這也是一個裝B的利器,本機不用啓動項目,只要有源代碼,可以在本機直接遠程調試服務器上的代碼,打開姿勢如下:

4.1 項目啓動時,先允許遠程調試

java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081 -Djava.ext.dirs=. ${main_class}

起作用的就是

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

「注意:遠程調試從技術上講,就是在本機與遠程建立scoket通訊,所以端口不要衝突,而且本機要允許訪問遠程端口,另外這一段參數,放要在-jar 或 ${main_class}的前面」

4.2 idea中設置遠程調試

然後就可以調試了

前提是本機有項目的源代碼 ,在需要的地方打個斷點,然後訪問一個遠程的url試試,斷點就會停下來。

五、臨時執行表達式/修改變量的運行值

調試時,可以臨時執行一些表達式,參考下圖:點擊這二個圖標中的任何1個都可以

點擊+號後,就可以在新出現的輸入框裏輸入表達式,比如i+5

然後回車,馬上就能看到結果

當然,如果調試時,想動態修改變量的值,也很容易,在變量上右擊,然後選擇Set Value,剩下的事,地球人都知道。

善用上述調試技巧,相當大家擼起代碼來會更有感覺,最後祝大家debug愉快!


如果此文對你有所幫助,希望能隨手點個轉發!



End




乾貨分享



這裏爲大家準備了一份小小的禮物,關注公衆號,輸入如下代碼,即可獲得百度網盤地址,無套路領取!

001:《程序員必讀書籍》
002:《從無到有搭建中小型互聯網公司後臺服務架構與運維架構》
003:《互聯網企業高併發解決方案》
004:《互聯網架構教學視頻》
006:《SpringBoot實現點餐系統》
007:《SpringSecurity實戰視頻》
008:《Hadoop實戰教學視頻》
009:《騰訊2019Techo開發者大會PPT》

010: 微信交流羣


我就知道你“在看”

本文分享自微信公衆號 - JAVA日知錄(javadaily)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章