IDEA中的debug斷點調(diào)試技巧,學會真的香!

致力于最高效的Java學習

B 站搜索:楠哥教你學Java
獲取更多優(yōu)質(zhì)視頻教程
1、打斷點的基本操作
開始 debug 之前,首先需要學會在代碼中打斷點,非常簡單,直接在代碼左側(cè)單擊鼠標左鍵即可。

然后,啟動程序不能使用 run 的方式,而是要點擊 debug。

當看到如下狀態(tài)的時候,說明已經(jīng)進入了斷點。

然后我們會在 IDEA 中看到這樣一個界面,有很多按鈕,接下來楠哥逐個給大家講解每個按鈕的作用。

我們先說橫排的 8 個按鈕,我會按照橫 1、橫 2 這樣的命名方式來介紹。
橫 1:從其他界面回到當前斷點界面光標處。
橫 2:從斷點處開始,逐行執(zhí)行代碼,如果遇到方法,直接跳過。
橫 3:從斷點處開始,逐行執(zhí)行代碼,如果遇到方法,會進入方法,但是只能進入自定義方法,不會進入官方類庫的方法。
橫 4:從斷點處開始,逐行執(zhí)行代碼,如果遇到方法,會進入方法,適用于所有方法。
橫 5:從當前斷點處回退,回到方法的調(diào)用處。
橫 6:回退斷點,回到上一個斷點處,與橫 5 的區(qū)別在于,它會回到上一個方法的斷點中,而橫 5 只會回到上一個方法的調(diào)用處,并不會進入方法。
橫 7:回到斷點光標處,與橫 1 的區(qū)別在于,它會繼續(xù)往后執(zhí)行一行代碼。
橫 8:計算表達式,在 debug 模式中,可以直接輸入當前類中的任意一個方法,直接進行運算,輸出結(jié)果,如下圖所示。

好了,介紹完橫排按鈕之后,接下來介紹豎排各個按鈕的作用。
豎 1:重新運行程序,進入 debug 模式。
豎 2:執(zhí)行程序,但不是逐行執(zhí)行,而是跳轉(zhuǎn)到下一個斷點處。
豎 3:暫停斷點,這個基本用不到。
豎 4:終止程序的運行。
豎 5:顯示所有斷點,如下圖所示。

豎 6:讓所有斷點失效,debug 不再進入斷點,要恢復斷點,再次點擊此按鈕即可。
2、實際開發(fā)斷點技巧
通過上面的步驟,想必大家已經(jīng)學會了如何打斷點,那么接下來楠哥再給大家介紹幾種實際開發(fā)中常用的斷點調(diào)試技巧,學會之后,寫代碼簡直不要太香。
1、設(shè)置斷點條件
可以手動設(shè)置進入斷點的條件,比如代碼如下所示。
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
如果我們在這個循環(huán)中打斷點,那么每次執(zhí)行循環(huán)都會進入斷點,我們可以通過設(shè)置斷點條件來控制是否進入斷點,比如只需要在 i = 10 的時候進入斷點,則可以在斷點處右鍵,在彈出的對話框的 Condition 中輸入條件,如下所示。

再次執(zhí)行程序,可以看到 i == 10 的時候進入斷點。

2、動態(tài)修改變量的值
在 debug 模式中,可以手動修改程序中變量的值,比如代碼如下所示。
public static void test3(){
int add = add(1, 2);
System.out.println(add);
}
public static int add(int i,int j){
return i+j;
}
變量 add 的值應該是 3,我們可以手動修改它的值,在控制臺的 Variables 中選擇 Set Value,具體操作如下所示。

然后繼續(xù)執(zhí)行代碼,可以看到控制臺輸出的就是 6。

當然,這只是臨時的修改,下一次程序運行,結(jié)果仍然是 3。
3、多線程斷點調(diào)試
在多線程的情況下,我們可以對線程的執(zhí)行順序進行控制,比如代碼如下所示。
new Thread(()->{
System.out.println("線程1-1");
System.out.println("線程1-2");
System.out.println("線程1-3");
}).start();
new Thread(()->{
System.out.println("線程2-1");
System.out.println("線程2-2");
System.out.println("線程2-3");
}).start();
運行結(jié)果如下圖所示。

如果我們希望按照 線程1-1,線程2-1,線程1-2,線程2-2,線程1-3,線程2-3 的順序輸出,可以通過設(shè)置斷點執(zhí)行順序來實現(xiàn),具體操作如下所示。

先在兩個線程代碼中打斷點,然后在斷點處右鍵,設(shè)置為 Thread,如下圖所示。

接下來執(zhí)行程序,進入斷點的時候,通過切換當前線程來實現(xiàn)交替執(zhí)行,比如第一次執(zhí)行為 Thread-0,那么接下來就切換到 Thread-1 執(zhí)行,然后再切換到 Thread-0 來執(zhí)行,如下圖所示。


這樣反復切換執(zhí)行完畢之后,運行結(jié)果如下圖所示。

4、同時運行多個服務。
我們在做分布式開發(fā)的時候,同一個項目往往同時要啟動調(diào)試多個服務實例,但是當我們第二次啟動服務的時候,會彈出如下界面,意思是需要停止當前服務,才能重新啟動第二個。

這個問題我們只需要做一個簡單的配置就能解決,選擇 Edit Configurations。

在彈出的窗口中勾選 Allow parallel run 即可,這樣就可以同時啟動多個服務了。

好了,以上就是關(guān)于 IDEA 中斷點調(diào)試的使用,你可能覺得這種具體操作看文章不是特別直觀,沒關(guān)系,楠哥專門錄制了視頻教程,保證你看完之后,立馬清清楚楚,視頻已經(jīng)上傳到 B 站了,掃描下方二維碼或者點擊文末【閱讀原文】,即可直達 B 站!
楠哥簡介
資深 Java 工程師,微信號 southwindss
《Java零基礎(chǔ)實戰(zhàn)》一書作者
騰訊課程官方 Java 面試官,今日頭條認證大V
GitChat認證作者,B站認證UP主(楠哥教你學Java)
致力于幫助萬千 Java 學習者持續(xù)成長。

