還記得以前不會使用 IntelliJ 的 debug 功能時,想要看某個 Variable 的值,都是在那行 code 的下面一行加上 System.out.println()
,然後運行程式,把值 print 出來,如果要看另一個 Variable,我就再加一行 System.out.println()
,所以到後來我的 code 就會長的像下圖這樣
public User getMaleUser() {
List<User> userList = userDao.getUserList();
System.out.println(userList); // print userList,看一下userList裡面的內容長怎樣
// 從userList中取出男生,然後回傳
User resultUser;
for (User user : userList) {
if (user.getGender() == "男") {
resultUser = user;
}
}
System.out.println(resultUser); // 再print resultUser,確認一下回傳的user到底是哪一個
return resultUser;
}
可想而知,這樣做的開發效率是非常差的,每多看一個 variable 就要多增加一行 System.out.println()
,而且每次改了之後,都要重新運行程式,讓程式再 print 出一次數據,我想想都覺得痛苦,難道 IntelliJ 就沒有一個能夠快速反應出現在這個 variable 的值是什麼的功能嗎?
事實上,IntelliJ 是有提供的!當我們在運行程式時,改成使用 Debug 模式 運行就可以了!
使用 IntelliJ 的 Debug 模式來運行程式的好處
System.out.println()
去 print variable 了在 IntelliJ 的 Debug 模式中,有幾個比較重要的功能面板如下
IntelliJ 的 Debug 模式基本用法主要對應著上述 3 和 4 的兩組按鈕
在 Debug 過程中,跟蹤查看 variable 的值是非常必要的,有幾個方式可以查看當前 variable 的值
在前面第三部分有提到一個計算表達式 Evaluation Expression 按鈕,可以使用這個按鈕在 debug 過程中計算某個表達式的值,或是直接改變某個 variable 的值,而不用再去重新改 code 然後再重啟程式
假設在 Debug 模式下,想要快速比較當前 list.get(0).equals("first")
的結果,可以不用改 code,直接在計算表達式裡面運算,讓 IntelliJ 快速幫助我們計算出這個函式會回傳的值,非常方便,像是下面的 3. Result 部分,得到的就是使用計算表達式運行 list.get(0).equals("first")
的結果
或是說想要更改 variable 的值的話,也可以透過計算表達式來改變,像是下面這個例子,對 code 來說,list 裡只會有 first、second 兩個字串,但是因為我們在計算表達式裡使用了 list.add("third")
向 list 插入一個新的 Object third
,所以下方 Variables 變量區才會顯示 list 裡面有三個字串 first、second、third
題外話說一下,如果只是單純想要改變 variable 的值的話,還有另一種方法,不用透過計算表達式那麼麻煩。只要在 Variables 在直接對想要改的 variable 上點右鍵,使用 setValue
也能重新改變此 variable 的值的
有的時候在 for loop 一個集合或是數組的時候,可能只想要看 for loop 裡面的某個 i 值超過多少以上的 variable 情況,這時候就可以透過設置 break point 條件來達成,也就是說,只有在滿足了 break point 的條件時,才會停在該 break point 上,不然就會直接忽略此 break point
對 break point 點擊右鍵可以設置 break point 條件,像是下圖是設置成在 i=3
時才停下(如果沒有設置 break point 條件的話,則每進一次for loop,每個 i 都會停一次 break point)
在左下方點擊 View Breakpoints 可以查看目前已經設置的所有 break point,有時候自己 break point 打多了很容易忘記打在哪,可以透過這個功能知道自己都在哪些地方打了 break point,取消勾選可以使此 break point 失效
當設置異常 break point時,在程式中出現需要攔截的異常時,會自動定位到 throw exception 的那行
設置方式一樣是先點擊 view breakpoints,之後點擊 + 號添加異常 break point,這邊添加了一個 NullPointerException
當程式噴出 NullPointerException 時,IntelliJ 就會自動跳到拋出 NullPointerException 的那一行,省的我們再去定位問題點在哪,非常方便
本文列出了 IntelliJ 中 Debug 模式的實用用法,讓你在開發路上更順暢
不過要注意一點,因為 Debug 時會讓整個程式停在你打的 break point 上,所以千萬不能夠在 production 下 debug,只能夠在測試環境中進行 debug
有關 IntelliJ 中如何設置 remote debug,請參考我之前寫的這篇文章: IntelliJ - Remote Debug