1. 程式人生 > >IDEA:Debug使用詳解(含2018版特性)

IDEA:Debug使用詳解(含2018版特性)

Debug 介紹

Debug 設定


  • 如上圖標註 1 所示,表示設定 Debug 連線方式,預設是 SocketShared memory 是 Windows 特有的一個屬性,一般在 Windows 系統下建議使用此設定,相對於 Socket 會快點。

Debug 常用快捷鍵

快捷鍵介紹
F7在 Debug 模式下,進入下一步,如果當前行斷點是一個方法,則進入當前方法體內,如果該方法體還有方法,則不會進入該內嵌的方法中 必備
F8在 Debug 模式下,進入下一步,如果當前行斷點是一個方法,則不進入當前方法體內 必備
F9在 Debug 模式下,恢復程式執行,但是如果該斷點下面程式碼還有斷點則停在下一個斷點上 必備
Alt + F8在 Debug 的狀態下,選中物件,彈出可輸入計算表示式除錯框,檢視該輸入內容的除錯結果 必備
Ctrl + F8在 Debug 模式下,設定游標當前行為斷點,如果當前已經是斷點則去掉斷點
Shift + F7在 Debug 模式下,智慧步入。斷點所在行上有多個方法呼叫,會彈出進入哪個方法
Shift + F8在 Debug 模式下,跳出,表現出來的效果跟 F9 一樣
Ctrl + Shift + F8在 Debug 模式下,指定斷點進入條件
Alt + Shift + F7在 Debug 模式下,進入下一步,如果當前行斷點是一個方法,則進入當前方法體內,如果方法體還有方法,則會進入該內嵌的方法中,依此迴圈進入
Drop Frame這個不是一個快捷鍵,而是一個 Debug 面板上的按鈕。該按鈕可以用來退回到當前停住的斷點的上一層方法上,可以讓過掉的斷點重新來過

有時候我們可以這樣粗魯地認為 Debug 的使用就是等同於這幾個快捷鍵的使用,所以上面的 必備 快捷鍵是我們必須牢記的,這些也是開發很常用的。

idea的斷點除錯-選單講解


1:Step Over ,進入下一步,如果是方法,那就直接跳過(F8)

2:Step Into,進入下一步,如果是方法,就進入方法內部,但是不會進入jdk封裝的方法。(F7)

3:Force Step Into:強制進入下一步,不管是什麼方法,即使是jdk封裝的方法,也會進入。(Alt+Shift+F7)

4:Step Out:跳轉到下一個斷點,沒有一直執行到最後。(Shift+F8)

5: Run to Cursor:執行到游標處 (Alt+F9)

 =========================

F9            resume programe 恢復程式,下一個斷點

快捷鍵功能描述
F8單步除錯,不進入函式內部
F7單步除錯,進入函式內部
Shift+F7選擇要進入的函式
Shift+F8跳出函式
Alt+F9執行到斷點
Alt+F8執行表示式檢視結果
F9繼續執行,進入下一個斷點或執行完程式
Ctrl+F8設定/取消當前行斷點
Ctrl+Shift+F8
  • 檢視斷點

Debug 特殊技能使用


  • 如上圖 Gif 所示,檢視所選物件的方法常用有三種方式:
  • 選中物件後,使用快捷鍵 Alt + F8
  • 選中物件後,拖動物件到 Watches(在Watches裡,還可以實現動態值修改)
  • 選中物件後,滑鼠懸停在物件上 2 秒左右。


  • 如上圖 Gif 所示,在彈出表示式輸入框中 IntelliJ IDEA 也是能幫我們智慧提示。


  • 如上圖 Gif 所示,當我們需要過掉後面的所有斷點的時候,我們不需要去掉這些斷點,只需要點選左下角那個小圓點,點選小圓點之後,所有斷點變成灰色,然後我們再在按快捷鍵 F9 即可過掉當前和後面所有的斷點。


  • 我們可以給斷點設定進入的條件。如上圖 Gif 所示,因為變數 temp3 不等於 200 所以該斷點沒有被進入直接跳過。


  • 如上圖,我們可以給斷點設定更復雜的步入條件
  • 紅框中的 Pass count 表示跳過多少次後開始步入,比如 for 迴圈中,我們要檢視一個變數迴圈 3 次後的結果就可以使用該方式。


  • 如上圖,對於某些不重要的斷點,只要步入一次就夠了,就可以勾選此選項,讓它步入之後自動刪除。


  • 如上圖,對於某些場景的斷點,需要其他斷點先觸發之後再進行觸發,可以選擇此項。預設選擇的是: None


  • 有時候當我們步入方法體之後,還想回退到方法體外。如 Gif 演示,斷點進入 addNum 方法後,點選 Drop Frame 按鈕之後,斷點重新回到方法體之外。


  • 上圖 IntelliJ IDEA 版本:2017.1.3
  • 如上圖左側紅框內容,可以看到當前斷點執行緒執行的堆疊情況,最上面的為當前斷點位置,下面的是斷點前面執行的方法,如果需要看斷點前面走過的路,可以檢視該區域。並且可以用圖上箭頭按鈕進行限制顯示框架類程式碼的執行過程,而不是包括依賴 jar 裡面的執行過程。
  • 如上圖右側紅框內容,可以用來展示單點斷點位置的記憶體情況,對於判斷記憶體溢位相關問題很有幫助。

 IntelliJ IDEA 版本:2018.1中還有可以實現

debug異常模擬


IDEA的debug功能可以說讓我愛不釋手,無論是bug的排查,原始碼的閱讀,超多驚豔的功能幾乎每次都能讓你瞬間定位關鍵程式碼。在之前的版本,IDEA已經實現了表示式(段落)求值,動態值修改,force return等強悍的除錯功能,新版增加了Exception模擬功能。debug的時候,你可以在任意一個地方,模擬異常的丟擲,這在驗證程式碼的異常完備性方面非常有用。

參考來源:https://github.com/judasn/IntelliJ-IDEA-Tutorial/blob/master/debug-introduce.md