Debug 斷點調試詳解


Debug斷點調試功能

一、斷點簡介

  • 程序運行過程中執行到斷點,程序就會暫停在斷點的代碼處,不會自動繼續向下運行,可以根據程序員的指令分析之后的代碼流程

  • 在代碼行的最前面單擊即可設置斷點

    首先講述行斷點,所以此時的斷點應該打在方法體內部的代碼行上,而不是方法的聲明處

    image-20210409161553096
  • 以Debug模式啟動程序即可開啟斷點調試

    image-20210409161559552
  • 可以同時設置多個斷點

二、Debug控制面板

  • 以Debug模式啟動程序之后自動彈出Debug控制面板:

    image-20210409161611783
  • 控制面板的基本介紹

    image-20210409161620307

三、Debug按鈕的使用

對Debug按鈕的整體介紹:(后面會逐一詳解)

按鈕 說明
(Alt + F10):如果處於其他代碼行或頁面,點擊這個按鈕可回到此時Debug正在執行的代碼行
(F8):步過,代碼逐行向下執行,如果這一行上有方法則自動執行方法不會進入方法內部
image-20210409161745556 (F7):步入,如果當前行有方法,可以進入方法內部;一般用於進入自定義方法內,不會進入官方類庫的方法體
(Alt + Shift + F7):強制步入,能進入任何方法體,包括自定義方法和類庫方法
(Shift + F8):步出,自動執行完此方法體內的剩余代碼並從方法體內部退出到方法調用處的下一代碼行,表示此方法已執行完
(無快捷鍵) 回退斷點,退出方法體至方法調用處,此方法不會執行完,可以再次進入此方法
(Alt + F9):運行到光標處,無需打斷點,將光標定在某一代碼行,點擊此按鈕直接執行到此代碼行
(Alt + F8):計算表達式,可以解析指定的表達式(語句),並執行此表達式

1. 跳轉到當前Debug所在行

  • 對應的調試按鈕(Alt + F10)

  • 作用

    • 如果處於其他代碼行或頁面,點擊這個按鈕可回到此時Debug正在執行的代碼行
  • 使用步驟

    image-20210409161847620 image-20210409161901367 image-20210409161915983

2. 步過

  • 步過調試按鈕(F8)

  • 作用

    • 代碼逐行向下執行,如果這一行上有方法則自動執行方法不會進入方法內部
  • 使用步驟

    image-20210409161941027
  • 注意:斷點執行過程中所執行到的行(比如上圖有藍色條框的代碼行),表示的是此代碼行還沒有被執行,由編程人員選擇進入此方法還是步過此方法

3. 步入

  • 步入調試按鈕(F7)

  • 作用

    • 如果當前行有方法,可以進入方法內部;一般用於進入自定義方法內,不會進入官方類庫的方法體
  • 使用步驟

    image-20210409161959870

4. 強制步入

  • 強制步入調試按鈕(Alt + Shift + F7)

  • 作用

    • 能進入任何方法體,包括自定義方法和類庫方法
  • 使用步驟

    image-20210409162013281 image-20210409162025521

5. 步出

  • 步出調試按鈕(Shift + F8)

  • 作用

    • 自動執行完此方法體內的剩余代碼並從方法體內部退出到方法調用處的下一代碼行,表示此方法已執行完
  • 使用步驟

    image-20210409162106696 image-20210409161007053

6. 回退斷點

  • 回退斷點調試按鈕

  • 作用

    • 退出方法體至方法調用處,此方法不會執行完,可以再次進入此方法
    • 與步出的區別
      • 步出會執行完此方法然后退出,不可再次進入此方法(如果想再次進入方法必須重新Debug)
      • 回退不會執行完此方法,而是退回到方法的調用處,還可再次進入此方法
  • 使用步驟

    image-20210409162128912 image-20210409162138192

7. 運行到光標處

  • 運行到光標處按鈕 (F9)

  • 作用

    • 無需打斷點,將光標定在某一代碼行,點擊此按鈕直接執行到此代碼行
  • 使用步驟

    image-20210409162223930 image-20210409162233779

8. 計算表達式

  • 計算表達式按鈕(Alt + F8)

  • 作用

    • 解析表達式,執行表達式的代碼
      • 無需修改代碼,可以臨時修改參數的值
      • 獲取指定表達式的值
  • 使用步驟

    image-20210409162253672

    如果想要測試董事長,則點擊計算表達式按鈕臨時修改參數值:

    image-20210409161138215

    表達式修改為get方法,即可得到此對象的值

    計算表達式的功能並不單單限於以上兩種方式,可以解析任何表達式,只要符合Java語法即可

9. 其余按鈕介紹

9.1 重啟這次Debug

image-20210409162309523

9.2 程序向下運行,直到下一個斷點才停下來,如果沒有斷點,則整個程序會直接執行完畢

image-20210409162322463

9.3 進入斷點的管理面板(View BreakPoints)

image-20210409161315930

啟動Debug調試:

image-20210409162457305

9.4 臨時禁用所有斷點

image-20210409162605569

9.5 停止Debug過程

image-20210409163106347

注意:在方法內部停止了程序,此方法不會中斷,只有執行完此方法程序才會停止(進入了方法中只有執行完方法才可以出去)

四、Debug其他功能

1. 查看某一變量的值

image-20210409163133990

輸入所要查看的變量:

image-20210409163148934

變量的值將會顯示在面板上:

image-20210409163156604

2. 條件斷點

  • 條件斷點簡介

    • 當條件滿足時此斷點才會生效
  • 使用步驟

    image-20210409163227275

    讓程序繼續運行,直至條件滿足才進入斷點:

    image-20210409163235714

3. 多線程調試

  • 概念

    • 斷點右鍵

      image-20210409163247795
    • 如果為ALL的話,則所有線程都會顯示在面板上,同時控制所有線程,不利於觀察一個線程的執行過程

    • 如果為Thread的話,只會顯示一個線程的斷點調試過程

      • 所有的線程都會執行到斷點處停止,只不過是只能控制其中一個線程,想要控制其他線程必須切換線程
  • 使用步驟

    image-20210409163316335

    在面板可以切換要顯示的線程以及顯示各線程的狀態:

    image-20210409163338277

4. 強制方法返回

  • 概念

    • 當方法執行到一半時(比如出現了異常),不想繼續執行此方法(此方法中剩余的代碼都不執行),直接退回至調用處的下一行
  • 使用步驟

    image-20210409163959362

五、斷點分類

1. 行斷點

  • 上述講述的就是行斷點,斷點打在方法體內,而不是方法的聲明處

2. 詳細斷點(源斷點)

  • 使用 shift + 鼠標左鍵,斷點打在方法體內,而不是方法的聲明處

    image-20210409164444655

3. 方法斷點

3.1 作用一

  • 會自動的在進入方法或者離開方法時設置斷點(不可見的兩個斷點),可以直接從方法的第一行執行到方法的最后一行,方便觀察方法體內的參數、變量的初始值和最終值,而不關心變化過程

  • 在方法的聲明處打斷點

    image-20210409164255167
  • 進入Breakpoints中,設置斷點在進入方法時還是離開方法時

    image-20210409202213960

3.2 作用二

  • 自動的跳轉到方法的實現類

    • 為接口中的方法添加方法斷點

      image-20210409164534848
    • 沒有在實現類中添加任何斷點

      image-20210409164552718
    • 方法的調用處也沒有添加任何斷點

      image-20210409164759958
    • 以Debug方式啟動程序

      image-20210409164713713
    • 使用場景:接口的實現類有很多個,不知道是執行哪一個實現類的方法時,可以在接口的方法打一個方法斷點,會自動的跳轉到對應的實現類的方法

4. 異常斷點

  • 無需顯示設置異常斷點的位置,程序會自動的在產生指定異常的位置停止下來

  • 使用步驟

    • 首先進入斷點的管理面板(BreakPoints),添加異常斷點

      image-20210409165046836 image-20210409165107786 image-20210409165133780
    • 以Debug方式啟動程序,會自動的在產生異常的位置停頓

      image-20210409164918575

5. 字段斷點

  • 監控某一字段(屬性)在整個程序中執行的流程

    • 會自動的在此屬性值被讀取或者被修改的位置停頓下來,每有一次讀取或值變化就會停頓一次
  • 在字段所在的代碼行添加字段斷點

    image-20210409165228068
  • 進入Breakpoints中,設置程序停頓的條件

    image-20210409201638723
  • 以Debug方式啟動程序

    image-20210409165350901 image-20210409165450498

六、JDK1.8 Stream調試

image-20210409165554521 image-20210409165645915


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM