我是如何用IDEA調(diào)試BUG的柳洋?

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

一募书、條件斷點

場景:我們在遍歷某個集合绪囱,期望程序在滿足某些預設條件時停住,比如:沐芳老師在課堂上點名莹捡,需要在點到小明的時候暫停確認一下是否有人在幫小明答“到”鬼吵!

那沐芳老師可以這樣:

右擊斷點旁邊的小紅點(斷點),彈出面板篮赢,在Condition這里填入暫停條件齿椅,這樣調(diào)試時,當程序滿足條件時就會穩(wěn)穩(wěn)地停在student= "小明"的位置启泣。

二涣脚、回到"過去"

場景:?人非圣賢,孰能無過种远。在日常開發(fā)中涩澡,大家都有手殘的時候,比如在調(diào)試一個業(yè)務邏輯比較復雜,有多個方法嵌套時妙同,一不小心手抖射富,斷點過去了,這該怎么辦粥帚?

這天胰耗,沐芳老師如往常一樣在上課前點名,當點到小明的時候芒涡,不爭氣的小明在偷偷看喜歡的妹子柴灯,沒有注意聽,當反應過來時费尽,已經(jīng)錯過了答到赠群!十分懊悔(紅顏禍水啊)旱幼,這時小明就可以借用大雄的機器貓進行時光穿梭:

觀察上圖查描,我們看到,按照點名順序柏卤,現(xiàn)在沐芳老師點名已經(jīng)輪到小紅冬三,小明已經(jīng)錯過答到,機器貓可以這樣幫助小明:點擊上圖紅色框框圈中的Drop Frame圖標(如果存在多個方法的嵌套調(diào)用缘缚,可以多點幾下)勾笆,就這樣,小明穿越了桥滨,沒有錯過這次的答到:

tips:這個按鈕之所以叫做Drop Frame窝爪,是因為JVM內(nèi)部是以棧幀為單位來保存線程的運行狀態(tài),Drop Frame直譯過來就是扔掉當前運行的棧幀该园,回到上一幀的位置酸舍,這樣就實現(xiàn)了穿越。

三里初、多線程調(diào)試

終于老師?點名結束了啃勉,現(xiàn)在可以正常上課了。到了同學們最愛的老師提問双妨,同學們搶答的環(huán)節(jié)淮阐。

As we know 當我們啟動多個線程時,哪個線程內(nèi)的程序先執(zhí)行刁品,完全靠CPU的心情(爸爸一樣的存在)泣特,這樣就會造成一個問題:無法像單線程那樣按照執(zhí)行順序debug。現(xiàn)象就是你只管打斷點挑随,線程之間不亂跳算我輸状您,程序舉例如下:

老師提出問題后,四個同學開始搶答:

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

四弊决、遠程調(diào)試

大家能看到這里,小明不得不給大家介紹一個裝X的技能:云調(diào)試魁淳。即本機不用啟動項目飘诗,只要本機的源代碼與遠程服務器運行的jar包匹配,就可以在本機直接遠程調(diào)試服務器上的代碼界逛!打開姿勢如下:

遠程項目啟動時昆稿,先允許遠程調(diào)試

現(xiàn)在大多都是SpringBoot項目,因此我們在遠程服務器上運行一個jar包時

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

遠程調(diào)試從技術上講仇奶,就是在本機與遠程服務之間建立scoket通訊貌嫡,所以本機要可以訪問到遠程服務的端口。

在idea中設置遠程調(diào)試

接下來我們就可以正常調(diào)試了该溯,調(diào)試方式和本地運行服務調(diào)試無差,不信你發(fā)起一個請求别惦,并在對應的邏輯代碼中打個斷點試試狈茉?

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

再一個就是調(diào)試時掸掸,我們還可以臨時執(zhí)行一些表達式氯庆,點擊紅色框框選中的圖標,然后輸入你想執(zhí)行的表達式扰付,如下所示:

大家可以看到堤撵,小明心靈是多么脆弱,因為無法直面自己的實際年齡羽莺,再快要得到真實年齡是实昨,偷偷的減去了7年,所以他實際年齡永遠為18歲(手動滑稽)盐固。

六荒给、修改變量的運行值

當然,如果調(diào)試時刁卜,想動態(tài)修改變量的值志电,也很容易,在變量上右擊蛔趴,然后選擇Set Value挑辆,比如簡單粗暴的更改小明的年齡為18……

以上,這就是小明近期總結的IDEA的DEBUG技巧,希望可以幫助到大家鱼蝉。善用上述調(diào)試技巧茉继,相信大家擼起代碼來會更加有感覺,主要體現(xiàn)在:今晚可以不用加班蚀乔!

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烁竭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吉挣,更是在濱河造成了極大的恐慌派撕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬魂,死亡現(xiàn)場離奇詭異终吼,居然都是意外死亡,警方通過查閱死者的電腦和手機氯哮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門际跪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喉钢,你說我怎么就攤上這事姆打。” “怎么了肠虽?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵幔戏,是天一觀的道長。 經(jīng)常有香客問我税课,道長闲延,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任韩玩,我火速辦了婚禮垒玲,結果婚禮上,老公的妹妹穿的比我還像新娘找颓。我一直安慰自己合愈,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布叮雳。 她就那樣靜靜地躺著想暗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帘不。 梳的紋絲不亂的頭發(fā)上说莫,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音寞焙,去河邊找鬼储狭。 笑死互婿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的辽狈。 我是一名探鬼主播慈参,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刮萌!你這毒婦竟也來了驮配?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤着茸,失蹤者是張志新(化名)和其女友劉穎壮锻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涮阔,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡猜绣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敬特。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掰邢。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伟阔,靈堂內(nèi)的尸體忽然破棺而出辣之,到底是詐尸還是另有隱情,我是刑警寧澤减俏,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布召烂,位于F島的核電站,受9級特大地震影響娃承,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怕篷,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一历筝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廊谓,春花似錦梳猪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叠荠,卻和暖如春匿沛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榛鼎。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工逃呼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳖孤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓抡笼,卻偏偏與公主長得像苏揣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子推姻,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容