1. 程式人生 > >大牛都在用的IDEA除錯技巧

大牛都在用的IDEA除錯技巧

 

導讀

  • 文章轉載自https://mp.weixin.qq.com/s?__biz=MzI0ODYzMzIwOA==&mid=2247483950&idx=1&sn=22547fb4e1d21851b4d3a1c90e2e7aa3&chksm=e99c8039deeb092f09e716c66af31a4a08dfb918ff201e03778f01ac11b520006fc18e2f0fe9&scene=126&sessionid=1585026418&key=eadb0cb5ef4c1752272952c6f598727fa3f5acf307757ea9d6e2fd02c6f8fe21e7559fb168c6f36eaf3ba9278442bee1db07fc53ad550176a2e79fa3f9a5f460e97d6ccb6826df5c0c56723510258973&ascene=1&uin=MTA3MjI0MTk2&devicetype=Windows+10&version=62080079&lang=zh_CN&exportkey=Ac%2Fs4sUzw9sFrOJ9Y2e4SNg%3D&pass_ticket=fuWdYFindcdGpF10fnKSlQa5NqflzhdeQ6SAdKKpNo0%3D
  • 前天面試了一個985高校的實習生,問了他平時用什麼開發工具,他想也沒想的說IDEA,於是我拋磚引玉的問了一下IDEA的除錯用過吧,你說說怎麼設定斷點條件?那孩子懵了,想了好一會對我說沒用過,甚至都沒聽說過這個。

  • 作為一名資深的老司機,IDEA除錯可以說是家常便飯,如果不會debug,我都不信你讀過原始碼,就別和我說原理了,直接pass掉。

 

基本介面

 

① 以Debug模式啟動服務,左邊的一個按鈕則是以Run模式啟動。在開發中,我一般會直接啟動Debug模式,方便隨時除錯程式碼。

② 斷點:在左邊行號欄單擊左鍵,或者快捷鍵Ctrl+F8 打上/取消斷點,斷點行的顏色可自己去設定。

③ Debug視窗:訪問請求到達第一個斷點後,會自動啟用Debug視窗。如果沒有自動啟用,可以去設定裡設定。

④ 除錯按鈕:一共有8個按鈕,除錯的主要功能就對應著這幾個按鈕,滑鼠懸停在按鈕上可以檢視對應的快捷鍵。

⑤ 服務按鈕:可以在這裡關閉/啟動服務,設定斷點等。

⑥ 方法呼叫棧:這裡顯示了該執行緒除錯所經過的所有方法,勾選右上角的[Show All Frames]按鈕,就不會顯示其它類庫的方法了,否則這裡會有一大堆的方法。

⑦ Variables:在變數區可以檢視當前斷點之前的當前方法內的變數。

⑧  Watches:檢視變數,可以將Variables區中的變數拖到Watches中檢視 。

 

變數檢視

  • 在除錯過程中往往需要觀察變數的變化來判斷業務邏輯,我們可以在以下的四個地方觀察。

① 最常用的變數的觀察區域variables

② IDEA中最人性化的地方之一,會將變數的值陰影顯示在變數的後面。

③ watch區域,眼鏡的形狀,一般不會展開。如下圖:

點選'+'號可以新增需要觀察的變數,點選'-'號可以刪除。

④ 滑鼠懸停在變數上也會出現變數的值,點選展開即可檢視。

 

計算表示式

  • 在除錯業務邏輯的時候一般總會遇到某個條件或者某個變數的計算值的還不知道的情況下就需要判斷下一行程式碼,那麼此處就需要用到計算表示式的功能。計算表示式有兩種方法,如下:

① 選擇需要計算的程式碼,滑鼠右鍵---->Evaluate Expression--->Evaluate即可計算。

② 直接點選計算器形狀控制元件即可彈出計算的視窗,將程式碼複製進去即可,注意複製進去的程式碼一定要符合邏輯,比如區域性變數一定要是已經宣告的。

 

 

斷點條件設定

  • 對於新手要看Spring原始碼的話,再遇到除錯UserService的doGetBean的方法時可能要崩潰,因為doGetBean在容器啟動的時候可能會被呼叫幾十次,你把斷點打在doGetBean方法體中能讓你生不如死。

  • 設定斷點條件有兩種方式:

    • ①直接在斷點上右鍵,新增condition條件即可。

    • ② view breakpoints(ctrl+shift+8)顯示所有的斷點,在condition中新增條件即可。

 

  • 異常斷點:設定了異常斷點後,比如空指標異常,在程式出現需要攔截的異常時會自動定位到指定的行。如下圖:

① ctrl+shift+F8顯示所有斷點,點選+號新增Java Exception Breakpoints

② debug執行,一旦有程式碼出現該異常,會自動定位到指定程式碼。

 

執行緒切換

  • 通常我們在除錯的時候,一個請求過來被攔截了,此時想要發起另外一個請求是無法重新發的,因為另外一個請求被阻塞了,只有當前執行緒執行完成之後才會走其他的執行緒。在IDEA中可以改變一下阻塞級別,有兩種方法:

    • 斷點上右鍵--->選擇Thread---->Make Default,如下圖:

    • 顯示所有斷點(crtl+shift+F8),選中某一個斷點,選擇Thread,Make Default即可。如下圖:

  • 設定了阻塞級別,此時就可以線上程切換了,如下圖:

 

強制拋異常

這是IDEA 2018年加入的新功能,可以直接在除錯中丟擲指定的異常。使用方法跟上面的棄棧幀類似,右擊棧幀並選擇Throw Exception,然後輸入拋異常的程式碼,比如throw new NullPointerException,操作如下圖:

 

強制返回

  • 這是IDEA2015版時增加的功能,類似上面的手動拋異常,只不過是返回一個指定值罷了。使用方法跟上面也都類似,右擊棧幀並選擇Force Return,然後輸入要返回的值即可。如果是void的方法那就更簡單了,連返回值都不用輸。如下圖:

&n