<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 的 5 大調(diào)試技巧,你都掌握了嗎?

          共 2079字,需瀏覽 5分鐘

           ·

          2021-11-20 01:37

          不點(diǎn)藍(lán)字關(guān)注,我們哪來故事?




          正文如下


          來源 |?JAVA日知錄

          在項(xiàng)目開發(fā)的時候我發(fā)現(xiàn)很多小伙伴能非常熟練的使用 IDEA 編寫代碼,但是對于IDEA調(diào)試的技巧掌握的不是很好,只會F7、F8、F9等這些基本調(diào)試功能。

          而像一些復(fù)雜的調(diào)試場景就無從下手,如:在for循環(huán)中調(diào)試某個特定值;多線程、Reactor調(diào)試;修改變量的運(yùn)行值等。

          下面我們就來分場景介紹一下IDEA的調(diào)試技巧,看完掌握后調(diào)試bug的效率一定大大提升

          1. 條件斷點(diǎn)

          循環(huán)中經(jīng)常用到這個技巧,比如:遍歷1個大List的過程中,想讓斷點(diǎn)停在某個特定值。

          參考上圖,在斷點(diǎn)的位置,右擊斷點(diǎn)旁邊的小紅點(diǎn),會出來一個界面,在Condition這里填入斷點(diǎn)條件即可,這樣調(diào)試時,就會自動停在i=10的位置。

          2. 回到"上一步"

          該技巧最適合特別復(fù)雜的方法套方法的場景,好不容易跑起來,一不小心手一抖,斷點(diǎn)過去了,想回過頭看看剛才的變量值,如果不知道該技巧,只能再跑一遍。

          參考上圖,method1方法調(diào)用method2,當(dāng)前斷點(diǎn)的位置j=100,點(diǎn)擊上圖紅色箭頭位置的Drop Frame圖標(biāo)后,時間穿越了

          回到了method1剛開始調(diào)用的時候,變量 i 變成了99。

          注:好奇心是人類進(jìn)步的階梯,如果想知道為啥這個功能叫Drop Frame,而不是類似Back To Previous 之類的,可以去翻翻JVM的書,JVM內(nèi)部以棧幀為單位保存線程的運(yùn)行狀態(tài),drop frame即扔掉當(dāng)前運(yùn)行的棧幀,這樣當(dāng)前“指針”的位置,就自然到了上一幀的位置。

          3.多線程調(diào)試

          多線程同時運(yùn)行時,誰先執(zhí)行,誰后執(zhí)行,完全是看CPU心情的,無法控制先后,運(yùn)行時可能沒什么問題,但是調(diào)試時就比較麻煩了,最明顯的就是斷點(diǎn)亂跳,一會兒停這個線程,一會兒停在另一個線程,比如下圖:

          如果想希望下一個斷點(diǎn)位置是第2句詩句,可能要失望了:

          如果想讓線程在調(diào)試時,想按自己的愿意來,讓它停在哪個線程就停在哪個線程,可以在圖中3個斷點(diǎn)的小紅點(diǎn)上右擊,

          即:Suspend掛起的條件是按每個線程來,而非All。把這3個斷點(diǎn)都這么設(shè)置后,再來一發(fā)試試

          注意上圖中的紅框位置,斷點(diǎn)停下來時,這個下拉框可以看到各個線程(注:給線程起個容易識別的名字是個好習(xí)慣!),我們可以選擇線程“天空中的飛鳥”

          斷點(diǎn)如愿停在了第2句詩。

          4.遠(yuǎn)程調(diào)試

          這也是一個裝B的利器,本機(jī)不用啟動項(xiàng)目,只要有源代碼,可以在本機(jī)直接遠(yuǎn)程調(diào)試服務(wù)器上的代碼,打開姿勢如下:

          4.1 項(xiàng)目啟動時,先允許遠(yuǎn)程調(diào)試
          java?-server?-Xms512m?-Xmx512m?-Xdebug?-Xnoagent?-Djava.compiler=NONE?-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081?-Djava.ext.dirs=.?${main_class}

          起作用的就是:

          -Xdebug?-Xnoagent?-Djava.compiler=NONE?-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

          注意:遠(yuǎn)程調(diào)試從技術(shù)上講,就是在本機(jī)與遠(yuǎn)程建立scoket通訊,所以端口不要沖突,而且本機(jī)要允許訪問遠(yuǎn)程端口,另外這一段參數(shù),放要在-jar 或 ${main_class}的前面

          4.2 idea中設(shè)置遠(yuǎn)程調(diào)試

          然后就可以調(diào)試了

          前提是本機(jī)有項(xiàng)目的源代碼 ,在需要的地方打個斷點(diǎn),然后訪問一個遠(yuǎn)程的url試試,斷點(diǎn)就會停下來。

          5. 臨時執(zhí)行表達(dá)式/修改變量的運(yùn)行值

          調(diào)試時,可以臨時執(zhí)行一些表達(dá)式,參考下圖:點(diǎn)擊這二個圖標(biāo)中的任何1個都可以

          點(diǎn)擊+號后,就可以在新出現(xiàn)的輸入框里輸入表達(dá)式,比如i+5

          然后回車,馬上就能看到結(jié)果

          當(dāng)然,如果調(diào)試時,想動態(tài)修改變量的值,也很容易,在變量上右擊,然后選擇Set Value,剩下的事,地球人都知道。

          好了,今天的文章就到這里了,牢記這5大調(diào)試技巧可以讓你快速定位問題,迅速解決bug,最后祝大家debug愉快!

          往期推薦

          Java 抽象語法術(shù) JCTree 介紹和使用

          Spring Boot 異步調(diào)用的示例

          一女程序員被判 9 個月:因薪酬等問題離職,rm -f ?刪庫,癱瘓 6 個小時

          IDEA Live Templates 用法

          比Visio快10倍的畫圖工具來了!趕緊整上~


          -END-

          ↑ 點(diǎn)擊上方關(guān)注我公號??


          我是 泥瓦匠,堅(jiān)持分享編程,算法,Java 等干貨教程


          一枚醫(yī)科大本科生,開源小作者,半吊子創(chuàng)業(yè)愛好者...

          半吊子的自己在試錯,不知道以后會干什么,但享受現(xiàn)在的試錯,試錯給我驚訝的生活


          喜歡公號的互動分享,感謝關(guān)注,路上遇見了你,同一小段時間之路,相伴 ~



          長按識別,加我微信

          瀏覽 46
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  日本和韩国的黄色一级视频 | 韩国一级无码 | 日韩成人网站 | 做爱网络视频在线看网站免费 | 激情四房婷婷 |