日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】带你走进Debug的世界

發布時間:2025/3/15 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】带你走进Debug的世界 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于Debug和本文

Debug,意為“調試”,是程序員必備技能之一。

Debug開始用的時候還是很不習慣的,需要適應,本文面向新手介紹Debug相關內容。

Debug的三種手段

  • 斷點(breakpoint)
    • 打上斷點以后,程序運行到斷點處就會暫停,可以一步一步觀察運行情況。
  • 跟蹤(trace)
    • 跟著流程一步一步走,看看程序代碼的執行流程。
    • 跟著流程一步一步走,看看變量動態的變化情況。
  • 監視(watch)
    • 即時監視:鼠標指向變量。
    • 快速監視:點右鍵,Inspector。
    • 添加監視:點右鍵,Watch。

IntelliJ IDEA

最簡單的程序

先隨著一個最簡單的程序看IDEA的Debug流程。

我們選擇一個1+2+…+10的程序,我們通過這個最基本的程序了解如何去Debug。
IDEA我個人比較喜歡用F8來逐行運行觀察,發現問題再追蹤。

在標注行數的左邊欄的空白處,點一下,會出現一個紅點,帶出一條紅線,這叫斷點(IDEA的斷點真的比Eclipse好看和便于增刪)。

打斷點的目的是使程序Debug運行到這里的時候會停住,我們能逐步地觀察變量的變化、程序語句執行的流程等等。

根據我的觀察,其實對于初學者,需要測試的部分中一個方法打一個斷點就夠了,因為一直按F8就會繼續逐行執行,希望我這么說會比較容易接受一些。

右鍵Debug運行,注意不要Run,Run的話斷點就無效了。

開始運行后,可以看出程序停在了打斷點的那一行處,并且有很多灰色的k-v對,下方的Variable欄就會出現各種變量的值,可以追蹤各個變量的當前值和值的變化。

按F8就可以繼續執行。

Variable欄中藍色的變量表示剛剛被修改過:

運行結束,得到結果:(事實上如果真有Bug,能發現的話在過程中就發現了)

不斷的輸入

我們可能需要命令行輸入很多數據,有時候我們選擇復制后一股腦輸入Debug的Console中,但很多時候我們輸入幾個值并按回車就自動進入了Debug。而Debug運行到需要IO的地方就會阻塞,那么怎么去增加新的輸入呢?

先輸入10,然后回車:

程序跳到上面講過的Debug界面:

順著執行,會被IO卡住,那怎么辦呢?點擊Console,切到Console界面:

輸入新的值,回車:

這次就不是自動切回去了,需要點擊下方的Debugger:

程序繼續執行:

Console識別在一次IO后就切Debugger,所以比較省事的做法是,第一次就把所有的數據輸進去。

中斷Debug

想中斷Debug就和中斷Run一樣,左邊欄的紅色方框,點一下就能結束。

多方法打斷點

下面的代碼除了main()外還有一個多行的方法被調用,如果我們在for那里打上斷點能不能進入function()呢?

public class PlusTest {private static int function(int num) {int sum = 0;for (int i = 1; i <= num; i++) {sum += i;}return sum;}public static void main(String[] args) {int sum = 0;int num = 10;for (int i = 1; i <= num; i++) {sum += function(i);}System.out.println(sum);}}

從這個時候開始觀測(只有這一個斷點):

下一步:

下一步:

我們發現,并沒進入function(),這怎么辦呢?

當然是把function()也打上斷點:

接著走下去:

下一步:

哇偶,進去了!我們可以在function()方法里繼續觀察變量的變化了。

遞歸函數的Debug

遞歸的話有明顯的回溯感,特別是對于二叉樹遞歸算法,要是打斷點會感覺一會兒前進一會兒回溯。

要把握清楚到底在哪個子過程中遞歸,看準變量的變化。

這里也不拿很復雜的遞歸函數說事了,就說說階乘遞歸函數吧:

public class PlusTest {private static int function(int num) {if (num == 0 || num == 1) {return 1;}return num * function(num-1);}public static void main(String[] args) {int num = 10;System.out.println(function(num));}}

向下分解問題、遞歸:

遞歸到終止條件了:

到達遞歸終止條件后,就開始一步步彈出棧、形成答案了:

輸出結果:

Eclipse

左邊小圓點是斷點,左鍵單擊可標注:

右鍵選擇Debug運行:

會提示選擇進入Debug的模式,一定要進去,點Switch:

左邊有調用棧的信息,右邊有變量表、斷點表等信息,中間是代碼,下面是Console:

這里提示全部的斷點,不用的時候別忘了取消:

遞歸回溯的時候,左邊調用棧矚目:

按F6就像IDEA的F8一樣啦,一行一行執行;而F5的話還能追溯調用棧找到源碼,甚至可用來閱讀源碼 :

鼠標移到變量上還能直接看變量的值和狀況:

右上角的小Bug圖案,右鍵點擊,選擇Close即可退出Debug樣式、返回普通模式:

Eclipse和NetBeans的Debug比較

功能描述EclipseNetBeans
逐語句執行F5F7
逐過程執行F6F8
跳出函數F7Ctrl+F7
運行到光標處Ctrl+RF4

總結

以上是生活随笔為你收集整理的【Java】带你走进Debug的世界的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。