JavaRush /Java Blog /Random-TW /Intellij IDEA 中的調試:初學者指南
Roman Beekeeper
等級 35

Intellij IDEA 中的調試:初學者指南

在 Random-TW 群組發布
大家好,JavaRush 社群。今天我們將討論調試:它是什麼以及如何在 Intellij IDEA 中進行調試。 Intellij IDEA 中的調試:初學者指南 - 1本文是針對那些對 Java Core 已經了解甚少的人。發布庫將沒有框架或複雜的流程。輕鬆步行。所以讓自己舒服一點,讓我們開始吧!

為什麼需要調試?

讓我們立即明確:沒有沒有錯誤的程式碼......這就是生活的方式。因此,如果程式碼不能按我們的預期工作,我們不應該立即變得軟弱並放棄一切。 Intellij IDEA 中的調試:初學者指南 - 2但該怎麼辦呢?當然,您可以System.out.println在任何可以設定的地方設定它,然後對終端機中的輸出進行排序,希望能夠找到錯誤。儘管如此,這是可能的......他們做到了,而且他們使用日誌記錄仔細地做到了這一點(您可以在此處閱讀相關內容)。但如果可以在本機上運行程式碼,最好使用Debug。我想立即指出,在本文中,我們將考慮在 Intellij IDEA 中調試項目。如果您有興趣閱讀有關遠端偵錯的內容,請參閱我們資源中的一篇文章

什麼是調試

Intellij IDEA 中的調試:初學者指南 - 3調試是調試(檢查)程式碼的過程,在執行過程中您可以停在指定位置並觀察執行進度。了解程式在某個地方的狀態。這就像你可以停止生命並從外面看一切。很酷,對吧?我們的目標是快速輕鬆地學習如何使用我們最喜歡的開發環境 Intellij IDEA 偵錯應用程式。

開始調試需要什麼

我免費提供建議:當您閱讀本文時,請執行此處描述的所有操作,幸運的是,這裡有一切。你需要什麼:
  1. Intellij IDEA開發環境2019.3.1及更高版本。如果有人沒有,這裡有一個鏈接,您可以下載它。下載社群版,因為我將使用它。
  2. 從 GitHub克隆專案並透過 IDEA 匯入。
開啟IDEA: Intellij IDEA 中的調試:初學者指南 - 4選擇debug-presentation項目,點選確定,得到: Intellij IDEA 中的調試:初學者指南 - 5保留從外部來源匯入項目,Maven並點選完成。導入專案後,我們可以使用一個實例來描述該過程。

一點理論......我保證:D

要開始進行一點調試,您需要了解斷點是什麼,並了解一些入門所需的熱鍵。 斷點是一個特殊的標記,顯示應用程式應停止的位置或狀態。您可以透過左鍵點選左側邊欄或點選代碼位置並按Ctrl + F8來設定斷點。斷點分為三種類型:行標記、變數標記和方法標記。它看起來像這樣:
  • 每行:

    Intellij IDEA 中的調試:初學者指南 - 6

    如果表達式中有 lambda,那麼 IDEA 會為您提供一個選擇 - 將表達式放在整行上或專門放在 lambda 中:

    Intellij IDEA 中的調試:初學者指南 - 7
  • 每個方法:

    Intellij IDEA 中的調試:初學者指南 - 8
  • 每班

    Intellij IDEA 中的調試:初學者指南 - 9
可以按照與新增斷點時相同的步驟來刪除斷點。在某些情況下,您需要使它們不活動(靜音)。為此,在「偵錯」部分中,您可以找到一個圖標 Intellij IDEA 中的調試:初學者指南 - 10,該圖標將使所有斷點處於非活動狀態。要查看已經設定了哪些斷點,可以轉到左下角的「調試」並找到 圖標 Intellij IDEA 中的調試:初學者指南 - 11,或者按Ctrl+Shift+F8Intellij IDEA 中的調試:初學者指南 - 12當我們轉到斷點列表時,我們會看到: Intellij IDEA 中的調試:初學者指南 - 13有兩個預斷點這裡:
  • Bee.java:24 - 在 Bee 類別第 24 行
  • Main.java:14 - 在 Main 類別中的第 14 行
我想指出的是,當您克隆項目時,您將不會有這些斷點:您需要自己設定它們!還有一個Java 異常斷點部分。非常有用的東西。使用它,您可以新增隱式斷點,以便程式在引發任何異常或特定異常之前停止。讓我們為 RuntimeException 新增一個隱式斷點。這很容易完成:在左上角有一個加號“+”。按一下它並選擇Java 異常斷點Intellij IDEA 中的調試:初學者指南 - 14在出現的視窗中,寫下需要新增的異常的名稱,從建議清單中進行選擇,然後按一下確定Intellij IDEA 中的調試:初學者指南 - 15我們完成此教育計劃並繼續實踐。

走吧,讓我們進入調試的荒野

Intellij IDEA 中的調試:初學者指南 - 16由於我是遺傳性養蜂人,為了調試演示,我創建了一個項目,描述蜜蜂採集花蜜、將花蜜加工成蜂蜜以及從蜂巢中獲取蜂蜜的過程。根據項目根目錄中的自述文件的文檔,我們讀到:預期行為- 從所有收集花蜜的花朵(作為雙倍值)中,將收集到的蜂蜜量等於一半採集到的花蜜。此項目有以下類別:
  • 蜜蜂——普通工蜂;
  • BeeQueen - 蜂王;
  • BeeHive - 蜂箱;
  • HoneyPlant - 採集蜂蜜的蜂蜜植物;
  • Main -public static void main()專案啟動的方法所在的位置。
如果你運行該方法main(),結果發現不僅沒有計算蜂蜜的數量,而且還出現錯誤...... Intellij IDEA 中的調試:初學者指南 - 17你需要看看哪裡出了問題。從右下角的堆疊追蹤中,我們可以看到,在 中HoneyPlant.java:20,拋出了一個 RuntimeException: Intellij IDEA 中的調試:初學者指南 - 18這正是我們的情況:存在 RuntimeException,讓我們添加對此類異常的搜索,如上所述,然後運行main()該方法調試模式。為此,請在 Intellij IDEA 中單擊該方法之前的綠色三角形箭頭main()Intellij IDEA 中的調試:初學者指南 - 19我們將在觸發此圖標的異常之前獲取停止的程序 Intellij IDEA 中的調試:初學者指南 - 20Intellij IDEA 中的調試:初學者指南 - 21。要獲取完整信息,您需要查看“調試”部分。它有Variables,它顯示了應用程式這部分中可用的所有變數:
  • 花蜜=1.0;
  • 花蜜容量 = -1.0。
公平地拋出異常,因為蜂蜜植物中的花蜜量的值不能為負。但為什麼會出現這種情況呢?畢竟,有一個檢查,如果花蜜用完,則第 15-17 行返回零值:
if ( nectar == 0 ) {
         return 0;
}
但問題是它檢查了錯誤的變數......這是程式碼中的一個錯誤。該程式不是檢查花中花蜜的值(位於nectarCapacity變數中),而是檢查進入該方法的花蜜的值,並且是他們想要從花蜜中獲取的量。這就是第一個錯誤!因此,我們正確地表達並得到表達式:
if ( nectarCapacity == 0) {
         return 0;
}
接下來,我們main()在正常模式下運行該方法(Run `Main.main()`),沒有更多錯誤,程序運行了:應用程序 Intellij IDEA 中的調試:初學者指南 - 22運行並給出了答案: “33.0 蜂蜜是由 7 只蜜蜂從 2 株蜂蜜植物中生產的” 一切都會好起來的,但答案是錯誤...都是因為在文檔README 文件中寫道,花蜜以 2 比 1 的比例變成蜂蜜:
## Documentation
Presentation based on honey getting process.

**Note**: 1 honey point = 2 nectar points
從主要方法可以看出,有兩種蜜樹,分別為 30 和 40 單位的花蜜,所以最終你應該得到 35 單位的蜂蜜。他寫道 33. 另外兩個單位去哪了?...現在我們就會知道!為此,我們需要在Main.main()第 28 行的方法中放置一個斷點,beeHive.populateHoney()並在偵錯模式下運行main該方法: Intellij IDEA 中的調試:初學者指南 - 23讓我們仔細看看這一點。程式在執行到第 28 行之前就停止了。在底部我們看到“調試”部分,它描述了正在運行的應用程式的所有資訊。如同已經提到的,變數部分包含可從應用程式的此部分存取的所有變數和物件。Frames部分顯示了應用程式所經歷的步驟,您可以查看上一步並取得所有本機資料。要使程序繼續工作,可以按F9或綠色圖標,如下所示: Intellij IDEA 中的調試:初學者指南 - 24要停止程序,需要單擊紅色方塊:要 Intellij IDEA 中的調試:初學者指南 - 25以調試模式重新啟動應用程序,需要單擊箭頭: Intellij IDEA 中的調試:初學者指南 - 26接下來,要逐步完成應用程序,您可以使用兩個按鍵:
  • F8 - 瀏覽一段程式碼,不進入內部方法;
  • F7 - 瀏覽一段程式碼並進入內部方法。
因此,要讓該方法進入運行狀態beeHive.populateHoney(),我們需要按F7,然後我們繼續: 接下來,我們使用該方法使用F8Intellij IDEA 中的調試:初學者指南 - 27進入調試模式到底,並描述方法中發生的情況:
  • 第25行-Stream API用於從所有蜜蜂收集蜂蜜;
  • 第26行-在現有的基礎上添加蜂蜜;
  • 第27行-分配給蜂王2單位蜂蜜;
  • 第28行-從蜂蜜總量中去掉這兩個單位;
  • 第 29 行 - 子宮吃掉這種蜂蜜。
這就是這兩個單位要去的地方,萬歲!與業務分析師溝通後,我們得出的結論是文件README 文件包含錯誤,需要更新。讓我們更新 README 檔案:
## 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中心上的文章:)

總結

在這篇文章中我們發現:
  • 沒有沒有錯誤的工作,調試是解決錯誤的好方法;
  • 什麼是斷點以及它存在哪些類型;
  • 如何配置異常斷點;
  • 如何在調試模式下導航。

待讀文章

另請參閱我的其他文章:
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION