目錄
  如下是在IDEA中啟動Debug模式,進入斷點後的介面,我這裡是Windows,可能和Mac的圖示等會有些不一樣。就簡單說下圖中標註的8個地方:
Debug調試的功能主要對應著圖一中4和5兩組按鈕:
五、智能步入
六、斷點條件設定
七、多執行緒偵錯
#八、回退點
首頁 Java java教程 如何在Intellij IDEA中使用Debug的圖文介紹

如何在Intellij IDEA中使用Debug的圖文介紹

Sep 06, 2017 am 09:50 AM
debug idea intellij

  Debug用來追蹤程式碼的運作流程,通常在程式運作過程中出現異常,啟用Debug模式可以分析定位異常發生的位置,以及在運作過程中參數的變化。通常我們也可以啟用Debug模式來追蹤程式碼的運行流程去學習三方框架的源碼。

  所以學習下如何在Intellij IDEA中使用好Debug,主要包括如下內容:

    一、Debug開篇

    二、基本用法解鍵鍵開始

    二、基本用法&p ##    三、變數檢視

    四、計算表達式

    五、智能步

    六、斷點條件設定、斷定調試

    八、回退斷點

#    九、中斷Debug

    十、附:JRebel啟動

##    十、附:JRebel激活

##開篇

  首先看下IDEA中Debug模式下的介面。

  如下是在IDEA中啟動Debug模式,進入斷點後的介面,我這裡是Windows,可能和Mac的圖示等會有些不一樣。就簡單說下圖中標註的8個地方:

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

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

  ③ Debug視窗:存取請求到達第一個斷點後,會自動啟動Debug視窗。如果沒有自動激活,可以去設定裡設置,如圖1.2。

  ④ 調試按鈕:一共有8個按鈕,調試的主要功能就對應著這幾個按鈕,滑鼠懸停在按鈕上可以查看對應的快捷鍵。在選單列Run裡可以找到同樣的對應的功能,如圖1.4。

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

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

  ⑦ Variables:在變數區可以查看目前斷點之前的目前方法內的變數。

  ⑧ Watches:查看變量,可以將Variables區中的變數拖曳到Watches中查看 

  [圖1.1]

  

#     

##[圖1.2]:在設定裡勾選Show debug window on breakpoint,則要求進入到斷點後自動啟動Debug視窗

  

  [圖1.3]:如果你的IDEA底部沒有顯示工具列或狀態列,可以在View打開,顯示出工具列會方便我們使用。可以自己去嘗試下這四個選項。

  

  [圖1.4]:在選單列Run裡有調試對應的功能,同時可以查看對應的快捷鍵。

  

 

二、基本用法&快捷鍵

Debug調試的功能主要對應著圖一中4和5兩組按鈕:

  1、先說第一組按鈕,共8個按鈕,由左至右依序如下:

    

 [圖2.1]

   

 [圖2.1]

  與 Show Execution Point (Alt + F10):如果你的遊標在其它行或其它頁面,點擊這個按鈕可跳到目前程式碼執行的行。

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

    > Step Into (F7):步入,如果當前行有方法,可以進入方法內部,一般用於進入自訂方法內,不會進入官方類別庫的方法,如第25行的put方法。

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

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

    > Drop Frame (預設無):回退斷點,後面章節詳細說明。

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

    > Evaluate Expression (Alt + F8):計算表達式,後面章節詳細說明。 ###

  2、第二組按鈕,共7個按鈕,由上到下依序如下:

      [圖2.2]

    > Rerun 'x2]

    > Rerun 'xxxx':重新運行 'xxxx';程序,會關閉服務後重新啟動程序。

    > Update 'tech' application (Ctrl + F5):更新程序,一般在你的程式碼有改動後可執行這個功能。而這個功能對應的操作則是在服務配置裡,如圖2.3。

    > Resume Program (F9):恢復程序,例如,你在第20行和25行有兩個斷點,目前運行至第20行,按F9,則運行到下一個斷點(即第25行),再按F9,則執行完整個流程,因為後面已經沒有斷點了。

    > Pause Program:暫停程序,啟用Debug。目前沒發現具體用法。

    > Stop 'xxx' (Ctrl + F2):連續按兩下,關閉程式。有時候你會發現關閉服務再啟動時,報埠被佔用,這是因為沒完全關閉服務的原因,你就需要查殺所有JVM進程了。

    > View Breakpoints (Ctrl + Shift + F8):查看所有斷點,後面章節會涉及到。

    > Mute Breakpoints:啞的斷點,選擇這個後,所有斷點變為灰色,斷點失效,按F9則可以直接運行完程序。再次點擊,斷點變為紅色,有效。如果只想使某一個斷點失效,可以在斷點上右鍵取消Enabled,如圖2.4,則該行斷點失效。

     [圖2.3]:更新程序,On 'Update' actions,執行更新操作時所做的事情,一般選擇'Update classes and resources',即更新類別和資源檔案。

       一般配合熱部署插件會更好用,如JRebel,這樣就不用每次更改程式碼後還要去重新啟動服務。如何啟動JRebel,在最後章節附上。

       下面的On frame deactivation,在IDEA視窗失去焦點時觸發,即一般你從idea切換到瀏覽器的時候,idea會自動幫你做的事情,一般可以設定Do nothing,頻繁切換會比較消耗資源的。

       

    [圖2.4]

    

 

三、變量查看

在Debug過程中,追蹤查看變數的變化是非常必要的,這裡就簡單說下IDEA中可以查看變數的幾個地方,相信大部分人都了解。

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

  

 [圖3.1]

  2、遊標停留在參數上,顯示目前變數資訊。點擊開啟詳情如圖3.3。我一般會使用這種方式,快速又方便。

  

 [圖3.2]

  

 [圖3.3]

  3、在Variables查看,這裡顯示目前方法裡的所有變數。

   

 [圖3.4]

#  4、在Watches裡,點選New Watch,輸入需要看的變數。或是可以從Variables裡拖到Watche裡查看。

  

 [圖3.5]

  如果你發現你沒有Watches,可能在下圖所在的地方。

  

 [圖3.6]  

#    

 [圖3.7]

#4、計算表達式

 在   在   前面提到的計算表達式如圖4.1的按鈕,Evaluate Expression (Alt + F8) 。可以使用這個操作在偵錯過程中計算某個表達式的值,而不用再去列印資訊。

  

 [圖4.1]######  1、按Alt + F8或按鈕,或者,你可以選取某個表達式再Alt + F8,彈出計算表達式的視窗,如下,回車或點選Evaluate計算表達式的值。 ###

     這個表達式不但可以是一般變數或參數,也可以是方法,當你的一行程式碼中呼叫了幾個方法時,就可以用這種方式查看查看某個方法的回傳值。

   [圖4.2]

  2、設定變量,在計算表達式的框裡,可以改變變數的值,這樣有時候就能很方便我們去除錯各種值的情況了不是。

   [圖4.3]

 

五、智能步入

  想想,一行程式碼裡有好幾個方法,怎麼只選擇某一個方法進入。之前提到使用Step Into (Alt + F7) 或 Force Step Into (Alt + Shift + F7)進入到方法內部,但這兩個操作會根據方法調用順序依次進入,這比較麻煩。

  那麼智能步入就很方便了,智能步入,這個功能在Run裡可以看到,Smart Step Into (Shift + F7),如圖5.1

   [圖5.1]

  按Shift + F7,會自動定位到目前斷點行,並列出需要進入的方法,如圖5.2,點選方法進入方法內部。

  如果只有一個方法,則直接進入,類似Force Step Into。

   [圖5.2]

 

六、斷點條件設定

  透過設定斷點條件,滿足條件時,才停在斷點處,否則直接運轉。

  通常,當我們在遍歷一個比較大的集合或陣列時,在循環內設定了一個斷點,難道我們要一個一個去看變數的值?那肯定很累,說不定你還錯過這個值得重新來一次。

  1、在斷點上右鍵直接設定目前斷點的條件,如圖6.1,我設定exist為true時斷點才生效。

    [圖6.1]

#  2、點選View Breakpoints (Ctrl + Shift + F8),檢視所有斷點。

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

    勾選Log message to console,則會將目前斷點行輸出到控制台,如圖6.3

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

   [圖6.2]

  

   [圖6.3]

  

  3、

#  

  3、

#」右邊的說再說Filters過濾​​,這些一般情況下不常用,簡單說下意思。

    Instance filters:實例過濾,輸入實例ID(如圖6.5中的實例ID),但是我這裡沒有成功,不知道什麼原因,知道的朋友留個言。

    Class filters:類別過濾,根據類別名稱過濾,同樣沒有成功....

    Pass count:用於循環中,如果斷點在循環中,可以設定該值,循環多少次後停在斷點處,之後的循環都會停在斷點處。

  [圖6.4]

#   

   [圖6.5]

#  

##  4、

#  

##  4、

#,透過設定異常斷點,在程式中出現需要攔截的異常時,會自動定位到異常行。

  如圖6.6,點選+號加入Java Exception Breakpoints,加入異常斷點。然後輸入需要斷點的異常類,如圖6.7,之後可以在Java Exception Breakpoints裡看到新增的異常斷點。

  我這裡新增了一個NullPointerException異常斷點,如圖6.8,出現空指標例外後,自動定位在空指標例外。

   [圖6.6]

  

  [圖6.7]

#  

 #######  [####  ### #######」圖 [###4. ####  ### ###### ###

七、多執行緒偵錯

  一般情況下我們調試的時候是在一個執行緒中的,一步一步往下走。但有時候你會發現在Debug的時候,想發起另一個請求都無法進行了?

  那是因為IDEA在Debug時預設阻塞等級是ALL,會阻塞其它線程,只有在目前偵錯線程走完時才會走其它線程。可以在View Breakpoints裡選擇Thread,如圖7.1,然後點選Make Default設定為預設選項。

  [圖7.1]

   

  切換線程,在圖7.1中Frames的下拉列表裡,可以切換當前的線程,如下我這裡有兩個Debug的線程,切換另外一個則進入另一個Debug的線程。

  [圖7.1]

   

 

#八、回退點

  在調試的時候,想要重新走一下流程而不用再次發起一個請求?

  1、首先認識下這個方法調用棧,如圖8.1,首先請求進入DemoController的insertDemo方法,然後調用insert方法,其它的invoke我們且先不管,最上面的方法是當前斷點所在的方法。

  [圖8.1]

   

  2、斷點回退

#  所謂的斷點回退,其實就是回退上一個方法呼叫的開始處,在IDEA裡測試無法一行一行地回退或回到到上一個斷點處,而是回到上一個方法。

  回退的方式有兩種,一種是Drop Frame按鈕(圖8.2),按調用的方法逐步回退,包括三方類別庫的其它方法(取消Show All Frames按鈕會顯示三方類庫的方法,如圖8.3)。

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

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

  圖[8.2]

#  

  圖[8.3]

  

  圖[8.##  

  圖[8.4]##[8.4]

  

 

九、中斷Debug

  想要在Debug的時候,中斷請求,不要再走剩餘的流程了?

  有些時候,我們看到傳入的參數有誤後,不想走後面的流程了,怎麼中斷這次請求呢(後面的流程要刪除資料庫資料呢....),難道要關閉服務重新啟動程序?嗯,我以前也是這麼幹的。

  確切的說,我也沒發現可以直接中斷請求的方式(除了關閉服務),但可以透過Force Return,即強制返回來避免後續的流程,如圖9.1。

  點擊Force Return,彈出Return Value的窗口,我這個方法的返回類型為Map,所以,我在這裡直接返回 results,來強制返回,從而不再進行後續的。或者你可以new HashMap<>()。

  [圖9.1]

#  

  [圖9.2]

  

  

十、附:JRebel啟動

  目前本人一直使用JRebel做熱部署工具,效果還算理想,修改Java程式碼或xml等設定檔都能熱更新。偶爾服務開久了,或更改的文件較多時,熱更新沒有生效,需要重新啟動服務。

  這裡只是簡單說下我在網路上看到的一種免費獲得永久使用權的方式(非破解),不確定這種方式什麼時候不能用。

  ① 首先你需要一個Facebook或Twitter的帳號(最好Twitter)

  ② 進入這個網址:https://my.jrebel.com/,並登錄,如圖10.1# #####  ③ 然後在Install and Acticate裡可以得到你的永久啟動碼。 ######  ④ 在設定裡Jrebel裡設定啟動碼,如圖10.3,如果沒有安裝JRebel插件,先在Plugins裡安裝搜尋安裝JRebel插件。 ######  [圖10.1]######   #######

  [圖10.2]

  

#  [圖10.3]

  

#

以上是如何在Intellij IDEA中使用Debug的圖文介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
idea社群版和專業版的區別 idea社群版和專業版的區別 Nov 07, 2023 pm 05:23 PM

idea社群版與專業版的差異在授權方式、功能、支援與更新、外掛程式支援、雲端服務與團隊協作、行動開發支援、教育與學習、整合與擴充性、錯誤處理與調試、安全性與隱私保護等方面。詳細介紹:1、授權方式,社群版是免費的,適用於所有開發人員,無論使用什麼作業系統,社群版支援開源專案和商業項目,專業版是付費的,適用於商業開發,專業版有30天的試用期,之後需要購買許可證才能繼續使用等等。

五個IntelliJ IDEA插件,有效率地編寫程式碼 五個IntelliJ IDEA插件,有效率地編寫程式碼 Jul 16, 2023 am 08:03 AM

人工智慧AI是當前廣受認可的未來趨勢和發展方向。雖然有些人擔心AI可能會取代所有的工作,但實際上只會取代那些重複性高、產出低的工作。因此,我們應該學會更聰明地工作,而不是使勁努力工作。本文介紹5個由AI驅動的Intellij插件,這些插件可以幫助你提高生產力,減少繁瑣的重複性工作,讓你的工作更有效率、方便。 1GithubCopilotGithubCopilot是由OpenAI和GitHub共同開發的一款人工智慧程式碼輔助工具。它使用了OpenAI的GPT模型來分析程式碼上下文,預測並產生新的程式碼

SpringBoot專案設定斷點debug調試無效怎麼解決 SpringBoot專案設定斷點debug調試無效怎麼解決 May 11, 2023 am 10:49 AM

剛接觸springboot項目,(1)發現斷點debug調試無效,很鬱悶,網路搜尋解決方法。看到的都是一些很複雜的方案,說是遠端調試,還要另外開埠號。這和傳統的項目不一樣,因此覺得沒必要。所以經過摸索,發現有一種更簡單的方式,步驟如下:在pom檔案的plugin部分加上一段設定:false這樣就ok了;(2)關於SpringBoot專案中報錯說web.xml檔案ismissing的問題,因為傳統的web專案都是要web.xml檔案的,但是SpringBoot專案是可以不需要web.xml文件

Idea如何啟動多個SpringBoot項目 Idea如何啟動多個SpringBoot項目 May 28, 2023 pm 06:46 PM

一、準備工作使用Idea建構一個helloworld的SpringBoot專案。開發環境說明:(1)SpringBoot2.7.0(2)Idea:IntelliJIDEA2022.2.2(3)OS:MacOS環境不太一樣,有些操作是有些微區別的,但是整體的思路是一樣的。二、啟動多個SpringBoot2.1方案一:修改設定檔的連接埠在SpringBoot專案中,連接埠號碼可以在設定檔進行配置,所以最簡單可以想到的方案是修改設定檔application.(properties/yml)的端口配置s

Idea中Springboot熱部署無效怎麼解決 Idea中Springboot熱部署無效怎麼解決 May 18, 2023 pm 06:01 PM

一、開啟idea自動make功能1-從編譯器啟用Automake按:CTRL+SHIFT+ATYPE:makeprojectautomatically按:Enter啟用MakeProject自動功能2-在應用程式運行時啟用Automake按:CTRL+SHIFT+ATYPE:Registry找到keycompiler .automake.allow。

idea springBoot專案自動注入mapper為空報錯誤如何解決 idea springBoot專案自動注入mapper為空報錯誤如何解決 May 17, 2023 pm 06:49 PM

在SpringBoot專案中,如果使用了MyBatis作為持久層框架,使用自動注入時可能會遇到mapper報空指標異常的問題。這是因為在自動注入時,SpringBoot無法正確識別MyBatis的Mapper接口,需要進行一些額外的配置。解決這個問題的方法有兩種:1.在Mapper介面上加入註解在Mapper介面上加入@Mapper註解,告訴SpringBoot這個介面是Mapper接口,需要進行代理。範例如下:@MapperpublicinterfaceUserMapper{//...}2

idea是什麼軟體 idea是什麼軟體 Sep 02, 2022 pm 05:05 PM

idea是一種Java整合開發環境工具軟體,由JetBrains軟體公司開發。 IDEA提倡智慧編碼,特殊功能有:智慧選取、編碼輔助、靈活的排版、動態語法偵測、程式碼檢查、對JSP的完全支援、預設範本、版本控製完美支援、智慧程式碼等。

IntelliJ IDEA中如何調試Java Stream操作 IntelliJ IDEA中如何調試Java Stream操作 May 09, 2023 am 11:25 AM

Stream作業是Java8推出的一大亮點!雖然java.util.stream很強大,但還是有很多開發者在實際工作中很少使用,其中吐槽最多的一個原因就是不好調試,一開始確實是這樣,因為stream這樣的流式操作在DEBUG的時候,是一行程式碼,直接下一步的時候,其實一下就過了好多操作,這樣我們就很難判斷到底是裡面的哪一行出了問題。外掛:JavaStreamDebugger如果你用的IDEA版本比較新的話,這個插件已經是自備的了,就不需要安裝了。如果還沒安裝的話,就手動安裝一下,然後繼續下面

See all articles