最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用IDEA調(diào)試BUG的幾種方法

 更新時(shí)間:2020年03月30日 14:51:48   作者:程序員小明  
這篇文章主要介紹了如何用IDEA調(diào)試BUG的幾種方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

最近小明的bug有點(diǎn)多,忙的連王者榮耀都顧不上玩了,導(dǎo)致現(xiàn)在不得不抽點(diǎn)時(shí)間研究一下作為當(dāng)前大多Java程序員開(kāi)發(fā)工具的IDEA DEBUG功能,以提高效率。

一、條件斷點(diǎn)

場(chǎng)景:我們?cè)诒闅v某個(gè)集合,期望程序在滿(mǎn)足某些預(yù)設(shè)條件時(shí)停住,比如:沐芳老師在課堂上點(diǎn)名,需要在點(diǎn)到小明的時(shí)候暫停確認(rèn)一下是否有人在幫小明答“到”!

那沐芳老師可以這樣:

右擊斷點(diǎn)旁邊的小紅點(diǎn)(斷點(diǎn)),彈出面板,在Condition這里填入暫停條件,這樣調(diào)試時(shí),當(dāng)程序滿(mǎn)足條件時(shí)就會(huì)穩(wěn)穩(wěn)地停在student= "小明"的位置。

二、回到"過(guò)去"

場(chǎng)景:人非圣賢,孰能無(wú)過(guò)。在日常開(kāi)發(fā)中,大家都有手殘的時(shí)候,比如在調(diào)試一個(gè)業(yè)務(wù)邏輯比較復(fù)雜,有多個(gè)方法嵌套時(shí),一不小心手抖,斷點(diǎn)過(guò)去了,這該怎么辦?

這天,沐芳老師如往常一樣在上課前點(diǎn)名,當(dāng)點(diǎn)到小明的時(shí)候,不爭(zhēng)氣的小明在偷偷看喜歡的妹子,沒(méi)有注意聽(tīng),當(dāng)反應(yīng)過(guò)來(lái)時(shí),已經(jīng)錯(cuò)過(guò)了答到!十分懊悔(紅顏禍水?。@時(shí)小明就可以借用大雄的機(jī)器貓進(jìn)行時(shí)光穿梭:

觀(guān)察上圖,我們看到,按照點(diǎn)名順序,現(xiàn)在沐芳老師點(diǎn)名已經(jīng)輪到小紅,小明已經(jīng)錯(cuò)過(guò)答到,機(jī)器貓可以這樣幫助小明:點(diǎn)擊上圖紅色框框圈中的Drop Frame圖標(biāo)(如果存在多個(gè)方法的嵌套調(diào)用,可以多點(diǎn)幾下),就這樣,小明穿越了,沒(méi)有錯(cuò)過(guò)這次的答到:

tips:這個(gè)按鈕之所以叫做Drop Frame,是因?yàn)镴VM內(nèi)部是以棧幀為單位來(lái)保存線(xiàn)程的運(yùn)行狀態(tài),Drop Frame直譯過(guò)來(lái)就是扔掉當(dāng)前運(yùn)行的棧幀,回到上一幀的位置,這樣就實(shí)現(xiàn)了穿越。

三、多線(xiàn)程調(diào)試

終于老師點(diǎn)名結(jié)束了,現(xiàn)在可以正常上課了。到了同學(xué)們最?lèi)?ài)的老師提問(wèn),同學(xué)們搶答的環(huán)節(jié)。

As we know 當(dāng)我們啟動(dòng)多個(gè)線(xiàn)程時(shí),哪個(gè)線(xiàn)程內(nèi)的程序先執(zhí)行,完全靠CPU的心情(爸爸一樣的存在),這樣就會(huì)造成一個(gè)問(wèn)題:無(wú)法像單線(xiàn)程那樣按照?qǐng)?zhí)行順序debug?,F(xiàn)象就是你只管打斷點(diǎn),線(xiàn)程之間不亂跳算我輸,程序舉例如下:

老師提出問(wèn)題后,四個(gè)同學(xué)開(kāi)始搶答:

這么多同學(xué)搶答,讓堅(jiān)守崗位30多年的沐芳老師覺(jué)得再這樣下去課堂可能會(huì)有點(diǎn)混亂:但這并難不倒從業(yè)30多年的沐芳老師,她按如下圖所示:在斷點(diǎn)的位置上右擊,選擇Thread,就可以有目的地跟蹤某一位同學(xué)的搶答情況(一切都在掌握之中)。

四、遠(yuǎn)程調(diào)試

大家能看到這里,小明不得不給大家介紹一個(gè)裝X的技能:云調(diào)試。即本機(jī)不用啟動(dòng)項(xiàng)目,只要本機(jī)的源代碼與遠(yuǎn)程服務(wù)器運(yùn)行的jar包匹配,就可以在本機(jī)直接遠(yuǎn)程調(diào)試服務(wù)器上的代碼!打開(kāi)姿勢(shì)如下:

遠(yuǎn)程項(xiàng)目啟動(dòng)時(shí),先允許遠(yuǎn)程調(diào)試

現(xiàn)在大多都是SpringBoot項(xiàng)目,因此我們?cè)谶h(yuǎn)程服務(wù)器上運(yùn)行一個(gè)jar包時(shí)

java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8080 -jar xiaoming.jar

這里起作用的核心命令就是

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

遠(yuǎn)程調(diào)試從技術(shù)上講,就是在本機(jī)與遠(yuǎn)程服務(wù)之間建立scoket通訊,所以本機(jī)要可以訪(fǎng)問(wèn)到遠(yuǎn)程服務(wù)的端口。

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

接下來(lái)我們就可以正常調(diào)試了,調(diào)試方式和本地運(yùn)行服務(wù)調(diào)試無(wú)差,不信你發(fā)起一個(gè)請(qǐng)求,并在對(duì)應(yīng)的邏輯代碼中打個(gè)斷點(diǎn)試試?

五、臨時(shí)執(zhí)行表達(dá)式

再一個(gè)就是調(diào)試時(shí),我們還可以臨時(shí)執(zhí)行一些表達(dá)式,點(diǎn)擊紅色框框選中的圖標(biāo),然后輸入你想執(zhí)行的表達(dá)式,如下所示:

大家可以看到,小明心靈是多么脆弱,因?yàn)闊o(wú)法直面自己的實(shí)際年齡,再快要得到真實(shí)年齡是,偷偷的減去了7年,所以他實(shí)際年齡永遠(yuǎn)為18歲(手動(dòng)滑稽)。

六、修改變量的運(yùn)行值

當(dāng)然,如果調(diào)試時(shí),想動(dòng)態(tài)修改變量的值,也很容易,在變量上右擊,然后選擇Set Value,比如簡(jiǎn)單粗暴的更改小明的年齡為18……

以上,這就是小明近期總結(jié)的IDEA的DEBUG技巧,希望可以幫助到大家。善用上述調(diào)試技巧,相信大家擼起代碼來(lái)會(huì)更加有感覺(jué),更多相關(guān)IDEA調(diào)試BUG內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的Collections類(lèi)的使用示例詳解

    Java中的Collections類(lèi)的使用示例詳解

    Collections類(lèi)提供了一些靜態(tài)方法,這些方法能夠?qū)ist集合實(shí)現(xiàn)常用的算法操作,這些算法是排序,填充,移位和查找等。本文將通過(guò)示例為大家詳細(xì)講講Collections類(lèi)的使用,需要的可以參考一下
    2022-12-12
  • IDEA插件EasyCode及MyBatis最優(yōu)配置步驟詳解

    IDEA插件EasyCode及MyBatis最優(yōu)配置步驟詳解

    這篇文章主要介紹了IDEA插件EasyCode MyBatis最優(yōu)配置步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 基于synchronized修飾靜態(tài)和非靜態(tài)方法

    基于synchronized修飾靜態(tài)和非靜態(tài)方法

    這篇文章主要介紹了基于synchronized修飾靜態(tài)和非靜態(tài)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java?環(huán)境配置(2023年詳細(xì)教程)

    java?環(huán)境配置(2023年詳細(xì)教程)

    這篇文章首先為了完善我的知識(shí)體系,今后一些軟件的安裝教程也可能會(huì)用到想寫(xiě)一個(gè)更加詳細(xì)的,因?yàn)檫@并不僅僅是寫(xiě)給?IT?行業(yè)的,其它行業(yè)可能也需要配置java環(huán)境
    2023-06-06
  • java 實(shí)現(xiàn)多個(gè)list 合并成一個(gè)去掉重復(fù)的案例

    java 實(shí)現(xiàn)多個(gè)list 合并成一個(gè)去掉重復(fù)的案例

    這篇文章主要介紹了java 實(shí)現(xiàn)多個(gè)list 合并成一個(gè)去掉重復(fù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Java 中ThreadLocal類(lèi)詳解

    Java 中ThreadLocal類(lèi)詳解

    什么是ThreadLocal?顧名思義它是local variable(線(xiàn)程局部變量)。它的功用非常簡(jiǎn)單,就是為每一個(gè)使用該變量的線(xiàn)程都提供一個(gè)變量值的副本,是每一個(gè)線(xiàn)程都可以獨(dú)立地改變自己的副本,而不會(huì)和其它線(xiàn)程的副本沖突。從線(xiàn)程的角度看,就好像每一個(gè)線(xiàn)程都完全擁有該變量。
    2016-03-03
  • 在spring boot中使用java線(xiàn)程池ExecutorService的講解

    在spring boot中使用java線(xiàn)程池ExecutorService的講解

    今天小編就為大家分享一篇關(guān)于在spring boot中使用java線(xiàn)程池ExecutorService的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • java后臺(tái)驗(yàn)證碼生成的實(shí)現(xiàn)方法

    java后臺(tái)驗(yàn)證碼生成的實(shí)現(xiàn)方法

    在我們使用進(jìn)行系統(tǒng)開(kāi)發(fā)時(shí),為了提高系統(tǒng)的安全性,在登錄的時(shí)候多數(shù)人都會(huì)要求輸入驗(yàn)證,本文介紹了java后臺(tái)驗(yàn)證碼生成的實(shí)現(xiàn)方法,感興趣的一起來(lái)了解一下
    2021-05-05
  • java實(shí)現(xiàn)搶紅包算法(公平版和手速版)

    java實(shí)現(xiàn)搶紅包算法(公平版和手速版)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)搶紅包算法,分為公平版和手速版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式

    SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式

    近期接到了一個(gè)小需求,要將系統(tǒng)中的數(shù)據(jù)導(dǎo)出為Excel,且能將Excel數(shù)據(jù)導(dǎo)入到系統(tǒng),對(duì)于大多數(shù)研發(fā)人員來(lái)說(shuō),這算是一個(gè)最基本的操作了,本文就給大家總結(jié)一下SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

宝坻区| 杭锦旗| 德钦县| 永康市| 苍梧县| 特克斯县| 嘉黎县| 广河县| 新民市| 榕江县| 肇东市| 甘孜| 准格尔旗| 定南县| 龙海市| 若尔盖县| 商南县| 华坪县| 马公市| 宁强县| 石泉县| 霍林郭勒市| 武城县| 志丹县| 外汇| 博客| 太仓市| 山丹县| 察隅县| 怀化市| 和林格尔县| 忻州市| 普兰县| 全南县| 富川| 三原县| 章丘市| 中卫市| 开平市| 湾仔区| 炉霍县|