大家好,JavaRush 社群。今天我們將討論調試:它是什麼以及如何在 Intellij IDEA 中進行調試。 本文是針對那些對 Java Core 已經了解甚少的人。發布庫將沒有框架或複雜的流程。輕鬆步行。所以讓自己舒服一點,讓我們開始吧!
的文檔,我們讀到:預期行為- 從所有收集花蜜的花朵(作為雙倍值)中,將收集到的蜂蜜量等於一半採集到的花蜜。此項目有以下類別:
文檔README 文件中寫道,花蜜以 2 比 1 的比例變成蜂蜜:
文件README 文件包含錯誤,需要更新。讓我們更新 README 檔案:
中心上的文章:)
為什麼需要調試?
讓我們立即明確:沒有沒有錯誤的程式碼......這就是生活的方式。因此,如果程式碼不能按我們的預期工作,我們不應該立即變得軟弱並放棄一切。 但該怎麼辦呢?當然,您可以System.out.println
在任何可以設定的地方設定它,然後對終端機中的輸出進行排序,希望能夠找到錯誤。儘管如此,這是可能的......他們做到了,而且他們使用日誌記錄仔細地做到了這一點(您可以在此處閱讀相關內容)。但如果可以在本機上運行程式碼,最好使用Debug。我想立即指出,在本文中,我們將考慮在 Intellij IDEA 中調試項目。如果您有興趣閱讀有關遠端偵錯的內容,請參閱我們資源中的一篇文章。
什麼是調試
調試是調試(檢查)程式碼的過程,在執行過程中您可以停在指定位置並觀察執行進度。了解程式在某個地方的狀態。這就像你可以停止生命並從外面看一切。很酷,對吧?我們的目標是快速輕鬆地學習如何使用我們最喜歡的開發環境 Intellij IDEA 偵錯應用程式。開始調試需要什麼
我免費提供建議:當您閱讀本文時,請執行此處描述的所有操作,幸運的是,這裡有一切。你需要什麼: 開啟IDEA: 選擇debug-presentation項目,點選確定,得到: 保留從外部來源匯入項目,Maven並點選完成。導入專案後,我們可以使用一個實例來描述該過程。一點理論......我保證:D
要開始進行一點調試,您需要了解斷點是什麼,並了解一些入門所需的熱鍵。 斷點是一個特殊的標記,顯示應用程式應停止的位置或狀態。您可以透過左鍵點選左側邊欄或點選代碼位置並按Ctrl + F8來設定斷點。斷點分為三種類型:行標記、變數標記和方法標記。它看起來像這樣:-
每行:
如果表達式中有 lambda,那麼 IDEA 會為您提供一個選擇 - 將表達式放在整行上或專門放在 lambda 中:
-
每個方法:
-
每班
- Bee.java:24 - 在 Bee 類別第 24 行
- Main.java:14 - 在 Main 類別中的第 14 行
走吧,讓我們進入調試的荒野
由於我是遺傳性養蜂人,為了調試演示,我創建了一個項目,描述蜜蜂採集花蜜、將花蜜加工成蜂蜜以及從蜂巢中獲取蜂蜜的過程。根據項目根目錄中的自述文件- 蜜蜂——普通工蜂;
- BeeQueen - 蜂王;
- BeeHive - 蜂箱;
- HoneyPlant - 採集蜂蜜的蜂蜜植物;
- Main -
public static void main()
專案啟動的方法所在的位置。
main()
,結果發現不僅沒有計算蜂蜜的數量,而且還出現錯誤...... 你需要看看哪裡出了問題。從右下角的堆疊追蹤中,我們可以看到,在 中HoneyPlant.java:20
,拋出了一個 RuntimeException: 這正是我們的情況:存在 RuntimeException,讓我們添加對此類異常的搜索,如上所述,然後運行main()
該方法調試模式。為此,請在 Intellij IDEA 中單擊該方法之前的綠色三角形箭頭main()
: 我們將在觸發此圖標的異常之前獲取停止的程序 。要獲取完整信息,您需要查看“調試”部分。它有Variables,它顯示了應用程式這部分中可用的所有變數:
- 花蜜=1.0;
- 花蜜容量 = -1.0。
if ( nectar == 0 ) {
return 0;
}
但問題是它檢查了錯誤的變數......這是程式碼中的一個錯誤。該程式不是檢查花中花蜜的值(位於nectarCapacity變數中),而是檢查進入該方法的花蜜的值,並且是他們想要從花蜜中獲取的量。這就是第一個錯誤!因此,我們正確地表達並得到表達式:
if ( nectarCapacity == 0) {
return 0;
}
接下來,我們main()
在正常模式下運行該方法(Run `Main.main()`)
,沒有更多錯誤,程序運行了:應用程序 運行並給出了答案: “33.0 蜂蜜是由 7 只蜜蜂從 2 株蜂蜜植物中生產的” 一切都會好起來的,但答案是錯誤...都是因為在## Documentation
Presentation based on honey getting process.
**Note**: 1 honey point = 2 nectar points
從主要方法可以看出,有兩種蜜樹,分別為 30 和 40 單位的花蜜,所以最終你應該得到 35 單位的蜂蜜。他寫道 33. 另外兩個單位去哪了?...現在我們就會知道!為此,我們需要在Main.main()
第 28 行的方法中放置一個斷點,beeHive.populateHoney()
並在偵錯模式下運行main
該方法: 讓我們仔細看看這一點。程式在執行到第 28 行之前就停止了。在底部我們看到“調試”部分,它描述了正在運行的應用程式的所有資訊。如同已經提到的,變數部分包含可從應用程式的此部分存取的所有變數和物件。Frames部分顯示了應用程式所經歷的步驟,您可以查看上一步並取得所有本機資料。要使程序繼續工作,可以按F9或綠色圖標,如下所示: 要停止程序,需要單擊紅色方塊:要 以調試模式重新啟動應用程序,需要單擊箭頭: 接下來,要逐步完成應用程序,您可以使用兩個按鍵:
- F8 - 瀏覽一段程式碼,不進入內部方法;
- F7 - 瀏覽一段程式碼並進入內部方法。
beeHive.populateHoney()
,我們需要按F7,然後我們繼續: 接下來,我們使用該方法使用F8進入調試模式到底,並描述方法中發生的情況:
- 第25行-Stream API用於從所有蜜蜂收集蜂蜜;
- 第26行-在現有的基礎上添加蜂蜜;
- 第27行-分配給蜂王2單位蜂蜜;
- 第28行-從蜂蜜總量中去掉這兩個單位;
- 第 29 行 - 子宮吃掉這種蜂蜜。
## Documentation
Presentation based on honey getting process.
**Note**:
* 1 honey point = 2 nectar points
* 2 honey point queen bee eats every time when beehive populates the honey.
就是這樣:發現的所有錯誤都已修復,我們可以繼續冷靜地喝咖啡並以聰明的樣子閱讀JavaRush總結
在這篇文章中我們發現:- 沒有沒有錯誤的工作,調試是解決錯誤的好方法;
- 什麼是斷點以及它存在哪些類型;
- 如何配置異常斷點;
- 如何在調試模式下導航。
GO TO FULL VERSION