你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

1. 什麼是 Debug?

還記得以前不會使用 Intellij IDEA 的 debug 功能時,想要看什麼數據都是在那行數據的下面一行加上 System.out.println(),然後運行程序,把數據打印出來,如果要看另一個數據,我就再加一行 System.out.println(),所以我的代碼就會長的像下圖這樣。。。

<code>public User getMaleUser() {    List<user> userList = userDao.getUserList();        // 打印出userList,看一下userList裡面的內容長怎樣    System.out.println(userList);        // 從userList中取出男生,然後回傳    User resultUser;    for (User user : userList) {        if (user.getGender() == "男") {            resultUser = user;        }    }    // 打印出resultUser,確認一下回傳的user到底是哪一個    System.out.println(resultUser);        return resultUser;}/<user>/<code>

可想而知,這樣做的開發效率是非常差的,每多看一個數據就要多增加一行 System.out.println(),而且每次改動之後,都要重新運行程序,讓程序再打印出一次數據,我想想都覺得痛苦,難道 IDEA 就沒有一個能夠實時反應出現在這個數據的數值是什麼的功能嗎?

事實上,IDEA 是有提供的!當我們在運行代碼時,改成使用 Debug 模式 運行就可以了!

2. IDEA 的 Debug 模式

使用 IDEA 的 Debug 模式來運行代碼的好處

  • 可以一步步排查代碼
  • 可以實時的知道代碼運行中的變量的值,甚至改變變量的值,從此不用再使用System.out.println()去打印代碼變量了

在 IDEA 的 Debug 模式中,有幾個比較重要的功能面板如下

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

  1. 開啟 Debug 模式的開關,通常在寫代碼時都會改用 Debug 模式來跑程序,已經很少使用旁邊的 Run 模式了
  2. 設置斷點,在左邊行號欄單擊左鍵就可以設置斷點,再點一下則可以取消此斷點,能夠設置斷點是 Debug 模式和 Run 模式最大的區別,而設置斷點可以幫助我們對代碼進行一步步的排查,這也是為什麼推薦使用 Debug 模式而不是使用 Run 模式
  3. 調試按鈕,Debug 調試代碼的主要功能就對應著這幾個按鈕
  4. 服務按紐,和 Debug 的斷點有關係,主要搭配著 3. 調適按鈕 一起用
  5. 變量區,可以查看當前斷點之前的變量

3. Debug 基本用法

IDEA 的 Debug 模式基本用法主要對應著上述的 3. 調試按鈕和 4. 服務按鈕這兩組按鈕

調試按鈕,從左到右共 8 個按鈕

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

  1. Show Execution Point : 如果你的光標在其它行或其它頁面,點擊這個按鈕可跳轉到當前代碼執行的地方
  2. Step Over : 一行一行的代碼往下執行,如果這一行上有方法不會進入方法
  3. Step Into : 如果當前行有方法,可以進入方法內部,一般用於進入自定義方法內,不會進入官方類庫的方法
  4. Force Step Into : 強制進入方法內部,能進入任何方法,查看底層源碼的時候可以用這個進入官方類庫的方法
  5. Step Out : 退出方法,從進入的方法內退出到方法調用處,此時方法已執行完畢,只是還沒有完成賦值
  6. Drop Frame : 回退斷點,很少用到
  7. Run to Cursor : 運行到光標處,你可以將光標定位到你需要查看的那一行,然後使用這個功能,代碼會運行至光標行,而不需要打斷點(前提是已經進入了 Debug 模式,也就是已經停在某個斷點上了)
  8. Evaluate Expression : 計算表達式,後面第五部分詳細說明

服務按鈕,從上到下共 7 個按鈕

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

  1. Rerun : 重新運行程序,他會關閉服務後重新啟動程序,不過很少用到,通常都會直接關掉再開啟一次
  2. Update 'tech' application : 更新程序,就是執行當初定義的 update 選項,當 Debug 模式啟動後,再次點擊 debug 按鈕也會跳出此選項
  3. Resume Program : 繼續執行程序,例如在第 20 行和 25 行有兩個斷點,而當前運行至第 20 行,按一下,則運行到下一個斷點(即第 25 行),再按一下,則運行完整個流程,因為後面已經沒有斷點了
  4. Pause Program : 暫停程序,很少用不是很重要
  5. Stop : 連續按兩下關閉程序,有時候你會發現關閉服務再啟動時,報端口被佔用,這是因為沒完全關閉服務的原因
  6. View Breakpoints : 查看所有斷點,後面第七部分詳細說明
  7. Mute Breakpoints : 將所有斷點變為灰色使斷點失效,按 Resume Program 那個鍵(也就是第三個按鍵)可以直接運行完程序(因為所有打的斷點都被設置為無效了),再次點擊這個 Mute Breakpoints 按鍵可以使所有無效斷點變為紅色有效

4. Debug 模式下的變量查看

在 Debug 過程中,跟蹤查看變量的變化是非常必要的,有幾個方式可以查看當前變量的值

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

  1. 參數所在行後面會顯示當前變量的值
  2. 遊標停到參數上,會顯示當前變量信息,點擊打開可以看到變量的詳情
  3. 在下方的 Variables 變量區窗口查看,這裡會顯示當前方法的所有變量,可以一次看到所有變量的詳情

5. 計算表達式 Evaluate Expression

在前面第三部分有提到一個計算表達式 Evaluation Expression 按鈕,可以使用這個按鈕在調試過程中計算某個表達式的值,或是直接改變某個變量的值,而不用再去重新改代碼手動改變量的值然後再重啟程序

假設在 Debug 模式下,想要快速比較當前 list.get(0).equals("first") 的結果,可以不用改代碼,直接在計算表達式裡面運算,讓 IDEA 快速幫助我們計算出這個函式會回傳的值,非常方便,像是下面的 3. Result 部分,得到的就是使用計算表達式運行 list.get(0).equals("first") 的結果

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

或是說想要更改變量的值的話,也可以透過計算表達式來改變,像是下面這個例子,正常代碼來說,list 裡只會有 first、second 兩個字串,但是因為我們在計算表達式裡調用了 list.add("third") 向 list 裡插了一條新的字串,所以下方 Variables 變量區才會顯示 list 裡面有三個字串 first、second、third

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

題外話說一下,如果只是單純想要改變變量的值的話,還有另一種方法,不用透過計算表達式那麼麻煩。只要在 Variables 變量區直接在變量上點右鍵,使用 setValue 也能重新改變此變量的值的

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

6. 斷點條件設置

有的時候在遍歷一個集合或是數組的時候,可能只想要看 for 迴圈面的某個 i 值超過多少以上的變量情況,這時候就可以透過設置斷點條件來達成,也就是說,只有在滿足了斷點條件時,才會停在斷點處,不然就會直接忽略此斷點

對斷點點擊右鍵可以設置斷點條件,像是下圖是設置成在 i=3 時才停下(如果沒有設置斷點條件的話,則每進一次for loop,每個 i 都會停一次斷點)

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

7. 查看所有斷點

在左下方點擊 View Breakpoints 可以查看目前已經設置的所有斷點,有時候自己斷點打多了很容易忘記打在哪,可以透過這個功能知道自己都在哪些地方打了斷點,取消勾選可以使此斷點失效

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

8. 設置異常斷點

當設置異常斷點,在程序中出現需要攔截的異常時,會自動定位到異常行

設置方式一樣是先點擊 view breakpoints,之後點擊 + 號添加異常斷點,這邊添加了 NullPointerException

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

當出現空指針異常時,會自動跳到拋出空指針異常的行數,省的我們再去定位問題點在哪,非常方便

你真的理解 Intellij IDEA 的 Debug 技巧嗎?這篇文章全部教給你

9. 總結

本文列出了 Intellij IDEA 中 Debug 模式的實用用法,讓你在開發路上更順暢

不過要注意一點,因為 debug 時會讓整個程式停在你打的斷點上,所以千萬不能夠在正式環境下 debug,只能夠在測試環境進行 debug


分享到:


相關文章: