深刻學習 Intellij IDEA 調試技巧

程序員的平常工做除了寫代碼以外,很大一部分時間將會在查找 BUG,解決問題。查找 BUG,離不開在 IDE 中調試代碼。熟練的掌握調試技巧,能夠幫助咱們減小查找時間,快速定位問題。java

在 IDEA 中調試代碼很方便,只要開啓調試,在相應代碼處使用斷點,而後進行相應調試便可。正是由於只要掌握這幾個功能,就能夠調試代碼,因此在很長一段時間內,不瞭解其餘調試技巧。後續深刻使用 IDEA 過程當中,不斷學會 IDEA 其餘調試技巧,很大程度上加快調試速度。程序員

Step 系列按鈕

平常調試的過程當中爲了爲了找到程序的bug,一般須要單步調試,一步一步跟蹤程序執行的流程,根據變量的值,找到最終緣由。數據庫

IDEA 中提供一系列 Step 功能按鈕用於單步調試,能夠在 Run 菜單欄找到所有 Step 功能。數據結構

Run 菜單欄

另外在調試窗口也能夠找到,不過這裏只會顯示一部分經常使用按鈕。多線程

調試按鈕

調試過程當中,使用頻率最高的可能就是 Setp OverSetp Over 能夠單步調試代碼,可是當碰到方法執行時,不會進入方法內,直接調用了方法,而後到下一行。測試

若是須要進入方法內,須要使用 Step IntoStep Into 能夠進入調用的方法內,不過默認情狀況下並不會進入 java.* 等類的方法中。若是須要進入,能夠在 Setting-Stepping 中設置,排除便可。。spa

image.png

另外還可使用 Force Step Into,強制進入。線程

當碰到一行代碼調用多個方法時,使用 Step Into 就比較蛋疼了。Step Into 會按照調用順序進入調用的方法,可是每每咱們只想進入其中一個方法而已。調試

這種場景下咱們可使用 Smart Step Into ,選擇指定方法進入。code

smart-step-into-pup-up-window-new.png

有些狀況下,在進入一個方法後,可使用 Setp Out,快速執行方法,而後跳回到調用處。

另外在進入 for/while 循環裏面的後,若是不在循環代碼外面打斷點出來,就需一步步隨着循壞代碼執行結束,特別麻煩。在這裏就可使用 Setp Out Of Code Block,快速跳出循環代碼塊。

斷點使用技巧

臨時斷點

通常調試的時候,咱們會在代碼行使用斷點,而後運行測試,等到程序遇到斷點暫停時,查看相關變量內容。

在 IDEA 中,默認斷點將會一直存在。有時候僅僅想須要暫停第一次,臨時查看,這個時候咱們可使用臨時斷點。使用快捷鍵 Ctel + Alt + Shift +F8 能夠快速建立臨時斷點或者按住 ALt,而後再建立斷點。。

條件斷點

有時候咱們在循環處理數據的過程當中,可能只關心某個條件的數據,這種狀況下咱們使用條件斷點。

右擊斷點,彈出設置斷點屬性的窗口,咱們就能夠在 condition 處設置條件。IDEA 會在知足這個條件時候,纔會暫停程序。

image.png

另外設置的條件斷點樣式也會比較特殊,image.png

多線程斷點

在調試多線程的項目時候,若是在多個線程代碼處打上了斷點,調試的時候你會發現,只能串行的調試。

image.png

上面多線程程序,兩個線程啓動以後,程序也許會在 thread1暫停,也許會在 thread2處暫停。只要任一個斷線暫停以後,另外一處斷點線程就會被阻塞。這時只能調試完暫停處線程的斷點,才能跳到第二處斷點,調試起來很是不方便。

咱們能夠設置斷點線程屬性,改變這個特性。

image.png

咱們能夠在斷點上使用鼠標右鍵彈出斷點設置框,在 Suspend 選擇 Thread 選項。從新啓動上面的程序,而後在調試窗口 Frames 能夠看到 thread1thread2 兩個線程。其中兩個線程都可進入調試,此時程序調試位於 thread1 處。這時選擇框選擇thread2,就能夠調試 thread2.

image.png

另外,斷點的多線程屬性能夠設置默認屬性,點擊 Make Default 按鈕,設置默認 Suspend屬性。

image.png

回退調試程序

調試的時候,有時候會進錯方法或者錯過一個方法調用過程,這個時候每每只能從新開始從頭開始執行調試一遍。重新開始調試,可能還須要設置相關參數,修改數據庫狀態等,很是麻煩。因此若是在調試過程當中能夠回退就能夠不用從新開始。

IDEA 中可使用 Drop FrameForce Return 回退調試程序。

Drop Frame

Drop Frame 字面意思爲丟棧。JVM 中使用棧幀用於進行方法調用數據結構,每次方法調用,對應着一個棧幀在虛擬機中從入棧到出棧的過程。調用方法以後,該方法棧幀將會位於棧頂。

執行 Drop Frame,丟棄棧頂棧幀,因而程序將會回到調用方法處。

image.png

調試上面的程序,在上面斷點處,使用 Drop Frame,就能夠跳回方法調用處,即第三行。查看輸出窗口,發現並無任何輸出。

Drop Frame 能夠在調試窗口欄找到。

image.png

注意與 Step Out 區別,執行 Step Out,方法將會執行結束以後再返回到調用處。

Force Return

Force Return 強制返回,能夠在程序執行到一半時強制返回結束程序。能夠在 Frames 找到。

image.png

image.png

點擊 Force Return,能夠設置返回值。

相關文章
相關標籤/搜索