<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>

          起飛,會(huì)了這4個(gè) Intellij IDEA 調(diào)試魔法,閱讀源碼都簡單了!

          共 526字,需瀏覽 2分鐘

           ·

          2022-01-19 15:38

          大家好,我是二哥!

          今天給大家?guī)韼讉€(gè)我日常工作以及閱讀源碼必備的 IntelliJ IDEA 高級(jí)調(diào)試技巧,分分鐘要起飛的節(jié)奏。

          斷點(diǎn)處添加 log

          很多程序員在調(diào)試代碼時(shí)都喜歡 print 一些內(nèi)容,這樣看起來更直觀,print 完之后又很容易忘記刪除掉這些沒用的內(nèi)容,最終將代碼提交到 remote,code review 時(shí)又不得不刪減這些內(nèi)容重新提交,不但增加不必要的工作量,還讓 log tree 的一些節(jié)點(diǎn)沒有任何價(jià)值

          IntelliJ IDEA 提供 Evaluate and Log at Breakpoints 功能恰巧可以幫助我們解決這個(gè)問題, 來看下面代碼:

          public?static?void?main(String[]?args)?{
          ??ThreadLocalRandom?random?=?ThreadLocalRandom.current();
          ??int?count?=?0;
          ??for?(int?i?=?0;?i????if?(isInterested(random.nextInt(10)))?{
          ????count++;
          ???}
          ??}
          ??System.out.printf("Found?%d?interested?values%n",?count);
          ?}



          ?private?static?boolean?isInterested(int?i)?{
          ??return?i?%?2?==?0;
          ?}

          假如我們想在第 15 行查看每次調(diào)用,隨即出來的 i 的值到底是多少,我們沒必要在這個(gè)地方添加任何 log,在正常加斷點(diǎn)的地方使用快捷鍵 Shift + 鼠標(biāo)左鍵,就會(huì)彈出下面的內(nèi)容

          勾選上 Evaluate and log, 并自定義你想查看的 log/變量,比如這里的 "interested" + i, 這樣以 Debug 模式運(yùn)行程序(正常模式運(yùn)行,不會(huì)打印這些 log):

          interested?7
          interested?5
          interested?1
          interested?2
          interested?0
          Found?2?interested?values

          如果你在多處添加了這種斷點(diǎn),簡單的看 log 可能偶爾還是不夠直觀,可以勾選上面圖片綠色框線的 "Breakpoint hit" message :

          Breakpoint?reached?at?top.dayarch.TestDebug.isInterested(TestDebug.java:49)
          interested?6
          Breakpoint?reached?at?top.dayarch.TestDebug.isInterested(TestDebug.java:49)
          interested?0
          Breakpoint?reached?at?top.dayarch.TestDebug.isInterested(TestDebug.java:49)
          interested?9
          Breakpoint?reached?at?top.dayarch.TestDebug.isInterested(TestDebug.java:49)
          interested?8
          Breakpoint?reached?at?top.dayarch.TestDebug.isInterested(TestDebug.java:49)
          interested?1
          Found?3?interested?values
          Disconnected?from?the?target?VM,?address:?'127.0.0.1:0',?transport:?'socket'

          Process?finished?with?exit?code?

          如果你想要更詳細(xì)的信息,那就勾選上 Stack trace (大家自己查看運(yùn)行結(jié)果吧),有了這個(gè)功能,上面說的一些問題都不復(fù)存在了

          字段斷點(diǎn)

          如果你閱讀源碼,你一定會(huì)有個(gè)困擾,類中的某個(gè)字段的值到底是在哪里改變的,你要一點(diǎn)點(diǎn)追蹤調(diào)用棧,逐步排查,稍不留神,就可能有遺漏

          我們可以在 IntelliJ IDEA 中為某個(gè)字段添加斷點(diǎn),當(dāng)字段值有修改時(shí),自動(dòng)跳到相應(yīng)方法位置

          使用起來很簡單:

          1. 在字段定義處鼠標(biāo)左鍵添加斷點(diǎn)(會(huì)出現(xiàn)「眼睛」的圖標(biāo))
          2. 在「眼睛」圖標(biāo)上鼠標(biāo)右鍵
          3. 在彈框中勾選上Field accessField modification 兩個(gè)選項(xiàng)

          如果修改字段值的方法比較多,也可以在 Condition 的地方定義斷點(diǎn)進(jìn)入條件, 有了這個(gè)功能的加成,相信你閱讀源碼會(huì)順暢許多

          異常斷點(diǎn)

          除了閱讀源碼,一定是遇到了異常我們才開始調(diào)試代碼,代碼在拋出異常之后會(huì)自動(dòng)停止,但是我們希望:

          代碼停在拋出異常之前,方便我們查看當(dāng)時(shí)的變量信息

          這時(shí)我們就用到了 Exception Breakpoints, 當(dāng)拋出異常時(shí),在 catch 的地方打上斷點(diǎn),可以通過下圖的幾個(gè)位置獲取棧頂異常類型,比如這里的 NumberFormatException

          知道異常類型后,就可以按照如下步驟添加異常斷點(diǎn)了:

          然后在彈框中選擇 NumberFormatException

          重新以 Debug 模式運(yùn)行程序:

          程序「一路綠燈式」定位到拋出異常的位置,同時(shí)指出當(dāng)時(shí)的變量信息,三個(gè)字:穩(wěn),準(zhǔn),狠,還有誰?

          方法斷點(diǎn)

          當(dāng)閱讀源碼時(shí),比如 Spring,一個(gè)接口的方法可能被多個(gè)子類實(shí)現(xiàn),當(dāng)運(yùn)行時(shí),需要查看調(diào)用棧逐步定位實(shí)現(xiàn)類,IDEA 同樣支持在接口方法上添加斷點(diǎn)(快捷鍵 cmd+F8/ctrl+F8):

          1. 鼠標(biāo)左鍵在方法處點(diǎn)擊斷點(diǎn)(??形狀)
          2. 斷點(diǎn)上鼠標(biāo)右鍵

          勾選上綠色框線上的內(nèi)容,同樣可以自定義跳轉(zhuǎn)條件 Condition

          當(dāng)以 Debug 模式運(yùn)行程序的時(shí)候,會(huì)自動(dòng)進(jìn)入實(shí)現(xiàn)類的方法(注意斷點(diǎn)形狀):

          看到這你應(yīng)該想到常見的 Runnable 接口中的 run 方法了,同樣是有作用的,大家可以自行去嘗試了

          總結(jié)

          相信有以上四種調(diào)試技巧的加成,無論是工作debug 還是私下閱讀源碼,都可以輕松駕馭了。最后,來看看 IDEA 支持的各種斷點(diǎn)調(diào)試類型,如果你只知道紅色小圓點(diǎn),那咱在留言區(qū)好好說說吧


          沒有什么使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不系之舟

          推薦閱讀

          瀏覽 70
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  国产区在线播放视频 | 神尾舞无码 | 国产高清色情 | 精品中文字幕视频在线 | 怡春院视频|