1. 程式人生 > >IntelliJ IDEA(十一) :Debug的使用

IntelliJ IDEA(十一) :Debug的使用

答案 停止 mar val 圖標設計 art style 打印 top

Debug模式是開發人員必會的一項調試程序的技能,用來追蹤代碼的運行流程,線上問題追蹤,程序運行異常定位調試,以及在運行過程中參數的變化。IDEA的debug對於新手如何快速上手呢?

一、基本介紹

本篇文章是基於IntelliJ IDEA2018.1.6版本,最新的版本2018.2已經出來了,支持Java11,Debug模式的圖標設計雖有微調改動,但是功能大體相通。

技術分享圖片

上圖爬蟲的圖標就是Debug模式運行鍵,綠色三角形圖標是正常的Run模式,長框中可以設置Debug運行配置。

技術分享圖片

打斷點方法和Eclipse類似,只需要在自己想要調試的代碼左邊行號欄單擊左鍵就可以,或者快捷鍵Ctrl+F8 打上/取消斷點

技術分享圖片

Debug啟動後,程序會停頓在第一個斷點上,debug視圖主要界面如下,各個按鍵分別是什麽意思呢?

技術分享圖片

>>> 先來看下最左側的各個按鍵,自上而下:

1. 重啟項目,快捷鍵Ctrl + F5,一般在你的代碼有改動後可執行這個功能,意味重新啟動項目。

2. 恢復程序,快捷鍵F9,在有多個斷點的情況下,會直接跳到下一個斷點,如果當前斷點為最後一個則直接運行結束。

3. 暫停項目

4. 停止當前啟動的項目。快捷鍵Ctrl + F2

5. View Breakpoints 查看所有斷點。快捷鍵Ctrl + Shift + F8

技術分享圖片

我們打過的斷點都可以在此窗口顯示,如果想刪除某個斷點,則可以選中列表中的該斷點,點擊紅色的減號來進行刪除。或者也可以通過不選中該斷點來使斷點失效。另外,

技術分享圖片

這個是針對單個斷點定制的,亦可以在項目中斷點處右擊調出該界面。

* Java Line Breakpoints 顯示了所有的斷點,在右邊勾選Condition,設置斷點的條件。

* 勾選Log message to console,則會將當前斷點行輸出到控制臺。

* 勾選Evaluate and log,可以在執行這行代碼是計算表達式的值,並將結果輸出到控制臺。

6. 靜啞斷點,使所有斷點無效,類似於無斷點運行。選擇這個後,所有斷點變為灰色,斷點失效,按F9則可以直接運行完程序。再次點擊,斷點變為紅色,有效。

例如:加入斷點過多,我們在其中某一個斷點已經找到問題想要的答案,後面的斷點不想繼續了,可以點擊一下該功能,就可以直接運行到程序結束。

>>> 接下來是實際調試過程中常用用到的幾個功能自左右向分別為:

技術分享圖片

1. Show Execution Point (Alt + F10):如果你的光標在其它行或其它頁面,點擊這個按鈕可跳轉到當前代碼執行的行。

2. Step Over (F8):越過,一行一行地往下走,如果這一行上有方法不會進入方法。

3. Step Into (F7):步入,如果當前行有方法,可以進入方法內部,一般用於進入自定義方法內,不會進入官方類庫的方法。

4. Force Step Into (Alt + Shift + F7):強制步入,能進入任何方法,查看底層源碼的時候可以用這個進入官方類庫的方法。

5. Step Out (Shift + F8):步出,從步入的方法內退出到方法調用處,此時方法已執行完畢,只是還沒有完成賦值。

6. Drop Frame (默認無):回退斷點,後面章節詳細說明。

7. Run to Cursor (Alt + F9):運行到光標處,你可以將光標定位到你需要查看的那一行,然後使用這個功能,代碼會運行至光標行,而不需要打斷點。

8. Evaluate Expression (Alt + F8):計算表達式。

二、快捷鍵說明

Run                 Shift + F10         運行最近一次運行的函數
Debug               Shift + F9          運行debug最近一次運行的函數
Run                 Alt + Shift + F10   初次運行指定的函數
Debug               Alt + Shift + F9    初次debug運行指定的函數
Stop                Ctrl + F2           停止項目
Step Over           F8                  越過當前函數
Forcce Step Over    Alt + Shift + F8    強制越過
Step Into           F7                  步入當前函數
Force Step Into     Alt + Shift + F7    強行進入當前函數
Smart Step Into     Shift + F7          只能進入當前函數
Step out            Shift + F8          步出
Resume Program      F9                  恢復程序
Evaluate Expression Alt + F8            計算表達式

三、變量查看

在Debug過程中,跟蹤查看變量的變化是非常必要的,這裏就簡單說下IDEA中可以查看變量的幾個地方

1、在IDEA中,參數所在行後面會顯示當前變量的值。

技術分享圖片

2、光標懸停到參數上,顯示當前變量信息,快捷方便。

技術分享圖片

3、在Variables裏查看,這裏顯示當前方法裏的所有變量。

技術分享圖片

4、在Watches裏,點擊New Watch,輸入需要查看的變量。或者可以從Variables裏拖到Watche裏查看。

技術分享圖片

四、計算表達式

計算表達式,Evaluate Expression (Alt + F8) 。可以使用這個操作在調試過程中計算某個表達式的值,而不用再去打印信息。

技術分享圖片

1、點擊計算表達式按鈕或快捷鍵Alt + F8,你也可以選中某個表達式再Alt + F8,彈出計算表達式的窗口,如下,回車或點擊Evaluate計算表達式的值。

這個表達式不僅可以是一般變量或參數,也可以是方法,當你的一行代碼中調用了幾個方法時,就可以通過這種方式查看查看某個方法的返回值。

技術分享圖片

2、設置變量,在計算表達式的框裏,可以改變變量的值,這樣有時候就能很方便我們去調試各種值的情況了。 技術分享圖片

五、調試技巧

鼠標右鍵點擊斷點,調出如下窗口,當然也可以通過快捷鍵Ctrl + Shift + F8

技術分享圖片

1、斷點條件設置

如上圖通過設置Conditionn內容設置斷點條件,通過設置斷點條件,在滿足條件時,才停在斷點處,否則直接運行。

如遍歷集合或者數組的時候,我們只想當下標等於某個值的時候才進入斷點調試。如下數組,我希望當 i=5時才進入斷點,

技術分享圖片

則可以這樣設置:

技術分享圖片

2、多線程調試

一般debug都是單線程調試,但是開發過多線程應用,有些時候,為了觀察多個線程間變量的不同狀態,以及鎖的獲取等,就會想到在代碼裏加個斷點debug一下。在IDE裏斷點停下來的時候,可以切換到另外的線程中,跑其他的代碼,不會互相影響。但是在IntelliJ IDEA裏默認是沒有開啟的。也就是說如果你在IDEA裏代碼裏加斷點,雖然一個線程的斷了下來,但其他線程的已經執行過了。此處勾選上Suspend,並選擇Thread,設置make default之後,也可以開始多線程應用的調試。

技術分享圖片

一個線程斷下來之後,可以通過在線程窗口切換,到其它線程中繼續運行。IntelliJ IDEA裏在這兒切換

技術分享圖片

3、回退斷點

在調試的時候如果點擊過快,錯過了自己想要關註的那一行,如何能跳回到上一步呢?依靠後退執行的功能,可以後退,就像下棋時悔棋那種功能一樣。

所謂的斷點回退,其實就是回退到上一個方法調用的開始處,在IDEA裏測試無法一行一行地回退或回到到上一個斷點處,而是回到上一個方法。回退的方式有兩種:

第一種是Drop Frame按鈕,按調用的方法逐步回退,包括三方類庫的其它方法(取消Show All Frames按鈕會顯示三方類庫的方法)。

技術分享圖片

第二種方式,在調用棧方法上選擇要回退的方法,右鍵選擇Drop Frame,回退到該方法的上一個方法調用處,此時再按F9(Resume Program),可以看到程序進入到該方法的斷點處了。

但有一點需要註意,斷點回退只能重新走一下流程,之前的某些參數/數據的狀態已經改變了的是無法回退到之前的狀態的,如對象、集合、更新了數據庫數據等等。

技術分享圖片

技術分享圖片

六、JRebel熱部署

後續補充

IntelliJ IDEA(十一) :Debug的使用