各位好啊,我是會編程的蝸牛,我們在使用IDEA開發java專案時,經常需要用到IDEA的除錯功能,不過平時我們用的除錯方法可能過于簡單了,其實IDEA還給我們提供了非常強大的除錯功能,下面讓我來看一看,相信看完一定會有所識訓的,
一、條件斷點
回圈中經常用到這個技巧,比如:遍歷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,剩下的事,地球人都知道,

善用上述除錯技巧,相當大家擼起代碼來會更有感覺,祝大家周末愉快!
作者:菩提樹下的楊過出處:http://yjmyzz.cnblogs.com
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利, 關注【會編程的蝸牛】,每天給你帶來有趣實用的編程知識!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511961.html
標籤:其他
上一篇:leetcode 145. Binary Tree Postorder Traversal 二叉樹的后序遍歷 (中等)
