做者:十光年
https://www.cnblogs.com/jun10...
循環中常常用到這個技巧,好比:遍歷1個大List的過程當中,想讓斷點停在某個特定值。html
參考上圖,在斷點的位置,右擊斷點旁邊的小紅點,會出來一個界面,在Condition這裏填入斷點條件便可,這樣調試時,就會自動停在i=10的位置java
該技巧最適合特別複雜的方法套方法的場景,好不容易跑起來,一不當心手一抖,斷點過去了,想回過頭看看剛纔的變量值,若是不知道該技巧,只能再跑一遍。面試
參考上圖,method1方法調用method2,當前斷點的位置j=100,點擊上圖紅色箭頭位置的Drop Frame圖標後,時間穿越了後端
回到了method1剛開始調用的時候,變量i變成了99,沒毛病吧,老鐵們,是否是很6 :)服務器
注:好奇心是人類進步的階梯,若是想知道爲啥這個功能叫Drop Frame,而不是相似Back To Previous 之類的,能夠去翻翻JVM的書,JVM內部以棧幀爲單位保存線程的運行狀態,drop frame即扔掉當前運行的棧幀,這樣當前「指針」的位置,就天然到了上一幀的位置。多線程
多線程同時運行時,誰先執行,誰後執行,徹底是看CPU心情的,沒法控制前後,運行時可能沒什麼問題,可是調試時就比較麻煩了,最明顯的就是斷點亂跳,一下子停這個線程,一下子停在另外一個線程,好比下圖:架構
若是想但願下一個斷點位置是第2句詩句,可能要失望了:socket
若是想讓線程在調試時,想按本身的願意來,讓它停在哪一個線程就停在哪一個線程,能夠在圖中3個斷點的小紅點上右擊, ide
即: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,剩下的事,地球人都知道。
善用上述調試技巧,至關你們擼起代碼來會更有感受,祝你們使用愉快!
推薦去個人博客閱讀更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
以爲不錯,別忘了點贊+轉發哦!