<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          IDEA Debug 高階技巧,老手都是這么玩的~~

          共 5777字,需瀏覽 12分鐘

           ·

          2024-11-12 12:20

          無需魔法,國內(nèi)可直接使用官方ChatGPT-4(Plus)、ChatGPT-4o!

          來源:juejin.cn/post/7308539123537592357

          • 目錄
          • 引言
          • Debug基礎(chǔ)
          • 高階技巧-條件斷點
            • 條件斷點應(yīng)用場景
            • 如何添加條件斷點
            • 條件斷點對于閱讀源碼的幫助
          • 高階技巧-計算器
            • 查看變量值
            • 修改變量值
            • 測試表達式
            • 執(zhí)行方法調(diào)用:

          目錄

          圖片

          引言

          IntelliJ IDEA,由JetBrains(捷克共和國)開發(fā)的一款強大的Java集成開發(fā)環(huán)境(IDE),因其豐富的功能、智能的代碼輔助以及用戶友好的界面設(shè)計,在全球范圍內(nèi)廣受Java開發(fā)者的喜愛,在國內(nèi),筆者遇到過不使用IDEA的Java程序員不超過三個。不僅限于Java,IntelliJ IDEA還支持多種其他編程語言和框架,如KotlinScalaGroovy以及Android開發(fā)等,這進一步擴大了其用戶基礎(chǔ)。其社區(qū)版是免費的,而專業(yè)版則提供了更為高級的功能。

          Debug(調(diào)試)是軟件開發(fā)中不可或缺的一個環(huán)節(jié)。它使開發(fā)者能夠逐行執(zhí)行代碼,檢查運行時的狀態(tài),包括變量值、內(nèi)存占用、線程狀態(tài)等,從而幫助開發(fā)者理解代碼的實際行為,定位并修復(fù)錯誤。良好的調(diào)試工具可以顯著提高問題解決的效率,減少猜測工作,幫助開發(fā)者構(gòu)建更加穩(wěn)定、高效的軟件系統(tǒng)。

          對了,最近我整理了上百本電子書/軟件/視頻以及面試題,還在持續(xù)更新中,全部免費,文檔地址:

          https://r86oxhhvu2.feishu.cn/wiki/ZMq0wjeFFiRRbvk9NeFcf7uknsJ


          在本文中,我將向大家介紹及演示IDEA的高階Debug技巧,包含但不限于:

          • 條件斷點(Conditional breakpoint): 允許開發(fā)者設(shè)置特定條件,只有當(dāng)這些條件滿足時,程序才會在這些斷點處暫停執(zhí)行。這對于調(diào)試復(fù)雜的循環(huán)和分支邏輯尤其有用,因為它可以讓你聚焦于特定的執(zhí)行路徑或案例。
          • 計算器(Evaluate Expression): 這個功能允許開發(fā)者在調(diào)試會話中計算表達式的值,不僅可以查看變量的當(dāng)前值,還可以執(zhí)行表達式,甚至調(diào)用方法。這對于驗證假設(shè)和測試代碼更改而無需重新啟動整個調(diào)試會話非常有用。

          Debug基礎(chǔ)

          寫一段代碼,開啟調(diào)試:

          圖片
          操作 Windows Mac(OS X)
          進入下一步,如果當(dāng)前行斷點是一個方法,則不進入當(dāng)前方法體內(nèi) F8 F8(Fn)
          進入下一步,如果當(dāng)前行斷點是一個方法,則進入當(dāng)前方法體內(nèi), 如果該方法體還有方法,則不會進入該內(nèi)嵌的方法中 F7 F7(Fn)
          智能步入,斷點所在行上有多個方法調(diào)用,會彈出進入哪個方法 Shift + F7 ?F7 (Fn)
          智能跳出 Shift + F8 ?F8 (Fn)
          恢復(fù)程序運行,如果該斷點下面代碼還有斷點則停在下一個斷點上 F9 F9(Fn)
          運行到光標(biāo)處,如果光標(biāo)前有其他斷點會進入到該斷點 Alt + F9 ?F9(Fn)
          計算表達式(可以更改變量值使其生效) Alt + F8 ?F8 (Fn)
          切換斷點(若光標(biāo)當(dāng)前行有斷點則取消斷點,沒有則加上斷點) Ctrl + F8 ?F8 (Fn)
          查看斷點信息 Ctrl + Shift + F8 ??F8 (Fn)

          高階技巧-條件斷點

          我們構(gòu)造一個List<User>用來模擬從數(shù)據(jù)庫查詢出列表,第三個元素id=3中的age屬性是null,我們在for循環(huán)中使用加法來觸發(fā)Integer類型的拆箱來出發(fā)空指針異常。

          public class IDEATest {
           public static void main(String[] args) {

            List<User> userList = new ArrayList<>(6);
            userList.add(new User(1, "Tom", 19));
            userList.add(new User(2, "Giles", 25));
            userList.add(new User(3, "Alex", null));
            userList.add(new User(4, "Ryan", 21));
            userList.add(new User(5, "DongGe", 19));
            userList.add(new User(6, "RUI", 21));

            userList.forEach(user -> {
             String name = user.getName();
             int futureAge = user.getAge() + 10;
             System.out.println(name + " 10年后" + futureAge + "歲");
            });
           }

          }

          @Data
          @AllArgsConstructor
          @NoArgsConstructor
          class User {
           private Integer id;

           private String name;

           private Integer age;
          }

          圖片

          可以看到IDEA提示了第25行代碼報了錯,我們定位到第25行代碼內(nèi)容:

          圖片

          為了定位問題,我們在第25行打個斷點:

          圖片

          null + 10

          在Java中,null是一個字面量,用來表示沒有任何對象與之關(guān)聯(lián)的引用。而+操作符在Java中主要有兩種用途:一是作為數(shù)學(xué)加法運算符,用于基本數(shù)據(jù)類型的數(shù)值相加;二是作為字符串連接運算符,用于將兩個字符串拼接在一起。

          當(dāng)你嘗試執(zhí)行null + 10這樣的表達式時,Java會嘗試找到一個合適的操作符重載來處理這個表達式。由于null不是一個數(shù)值,所以不能直接進行數(shù)學(xué)加法。但是,如果參與+操作的任一操作數(shù)是一個字符串,Java會將另一個操作數(shù)轉(zhuǎn)換為字符串,并執(zhí)行字符串連接操作。

          對了,最近我整理了上百本電子書/軟件/視頻以及面試題,還在持續(xù)更新中,全部免費,文檔地址:

          https://r86oxhhvu2.feishu.cn/wiki/ZMq0wjeFFiRRbvk9NeFcf7uknsJ

          條件斷點應(yīng)用場景

          為了定位到具體哪一條數(shù)據(jù)出了問題,我們需要按F9或點擊箭頭處按鈕直到循環(huán)到錯誤數(shù)據(jù),案例中共6條數(shù)據(jù),即使最后一條數(shù)據(jù)錯誤,我們也只需要按五次即可發(fā)現(xiàn)問題數(shù)據(jù),但是在正式/測試環(huán)境中,你無法確認從數(shù)據(jù)庫中查詢到多少條數(shù)據(jù),假如是1000條,接下來很長一段時間你將被這個問題所困擾。顯然我們應(yīng)該拒絕這種沒有效率、無意義、重復(fù)性的工作。

          如何添加條件斷點

          鼠標(biāo)移至紅色斷點處,使用右鍵:

          圖片

          圖片

          Condition中添加判斷條件,上文中出現(xiàn)的異常是NullPointerException,我們就判斷循環(huán)中的user對象age變量為null的即可:

          Objects.isNull(user.getAge())  

          點擊Done,確認。

          圖片

          重啟Debug,我們可以看到循環(huán)出的第一條數(shù)據(jù)不再是列表的第一條,而是問題數(shù)據(jù):

          圖片

          這樣我們便可以很快的定位到錯誤數(shù)據(jù),解決問題。

          條件斷點對于閱讀源碼的幫助

          例如,我們在閱讀Spring Framework源碼時,條件斷點可以幫助我們快速定位到正在目標(biāo)Bean。

          Spring Boot項目在啟動時,會加載所有被標(biāo)注的元數(shù)據(jù),此時我們自定義了一個Bean的類型叫a,我們可以在BeanFactoryUtils對應(yīng)的加載方法中添加條件斷點,這樣就可以更快的查看我們自定義的Bean的加載邏輯。

          圖片

          圖片

          高階技巧-計算器

          在2023新版IDEA中,可以通過以下步驟找到計算器,或者通過快捷鍵的方式找到計算器。

          圖片

          圖片

          查看變量值

          在斷點暫停時,你可以使用計算器來查看和評估變量的當(dāng)前值,這比在變量監(jiān)視窗口中查找要快得多。

          圖片

          修改變量值

          修改變量值:如果你想要測試代碼對于不同變量值的反應(yīng),可以使用計算器改變變量的值,而無需修改代碼并重新啟動調(diào)試過程。

          圖片

          圖片

          測試表達式

          如果你在編寫代碼時不確定某個表達式的結(jié)果,可以使用計算器快速進行測試,而不必寫額外的測試代碼或者等待代碼運行到那一點。

          對了,最近我整理了上百本電子書/軟件/視頻以及面試題,還在持續(xù)更新中,全部免費,文檔地址:

          https://r86oxhhvu2.feishu.cn/wiki/ZMq0wjeFFiRRbvk9NeFcf7uknsJ

          圖片

          執(zhí)行方法調(diào)用:

          通過計算器,你可以在不影響當(dāng)前程序執(zhí)行狀態(tài)的情況下執(zhí)行方法,這樣可以幫助你理解方法的行為或者驗證方法的返回值。

          圖片


              
          END

          普通人也能直接使用ChatGPT-4/ChatGPT4o


          一次性買了幾百個ChatGPT官方賬號,放在一個系統(tǒng)的池子里。共享給大家使用。不需要翻墻,就可以體驗到官方正版賬號。而且突破官方提問次數(shù)的限制。正版保證!支持GPTs、語音、聯(lián)網(wǎng)、上傳文件等功能

          更多介紹點這里,無需魔法使用官方ChatGPT-4(Plus)、ChatGPT-4o!

          每月只需72元! 


          掃碼可以加我微信購買,備注:GPT

          每天只要一瓶可樂錢


          瀏覽 327
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品自在拍在线拍 | 五月丁香六月婷婷久久 | 99超碰在线资源 | 成人三级小视频 | 色一情一乱一交一级A片 |