IDEA&Eclipse中debugger調(diào)試常用技巧

轉(zhuǎn)載請(qǐng)說(shuō)明出處:IDEA&Eclipse中debugger調(diào)試常用技巧

改變變量的值

在調(diào)試的過(guò)程中可以改變非final變量的值关串。


IEDA改變值.gif

條件斷點(diǎn)

有時(shí)候斷點(diǎn)會(huì)打在循環(huán)里惧浴,或者希望在某個(gè)條件下才觸發(fā)斷點(diǎn)现使,這個(gè)時(shí)候條件斷點(diǎn)就派上用場(chǎng)了瞪慧,在idea里對(duì)著斷點(diǎn)右鍵。
如下,在循環(huán)里,希望i的值為8的時(shí)候才開(kāi)始調(diào)試。

條件斷點(diǎn).gif

需要注意的是條件斷點(diǎn)可能會(huì)導(dǎo)致debug啟動(dòng)的時(shí)候非常慢(甚至僵死)祟剔,筆者試過(guò)在ThreadLocal#get里面使用條件斷點(diǎn),導(dǎo)致spring-mvc項(xiàng)目debug啟動(dòng)半小時(shí)都沒(méi)啟動(dòng)成功摩梧,最好啟動(dòng)后再啟用條件斷點(diǎn)物延。

代碼片段&&變量視圖

有時(shí)候你調(diào)試的時(shí)候,突然想增加一段代碼仅父,又不想重新啟動(dòng)調(diào)試叛薯,這個(gè)功能可以用上。


image.png

代碼片段.gif

在調(diào)試的過(guò)程中同時(shí)改變了變量的視圖笙纤,用toString來(lái)顯示耗溜,可以看到list里的兩個(gè)值12

Evaluate or Inspect

上面的代碼片段使用到的是Evaluate功能省容,這個(gè)功能很強(qiáng)大抖拴,比如我在跟蹤spring源碼的時(shí)候,我想知道AOP代理對(duì)象如何產(chǎn)生的時(shí)候腥椒,遇到如下代碼:

image.png

因?yàn)槲抑饕P(guān)注代理對(duì)象什么時(shí)候產(chǎn)生阿宅,所以這個(gè)時(shí)候我只想看看那個(gè)方法給我返回了代理對(duì)象,這時(shí)候我應(yīng)該直接Step Over還是Step IntoresolveName這個(gè)方法里呢笼蛛?可以用Evaluate來(lái)幫忙:
image.png

從上圖可以看出洒放,我評(píng)估了一下這個(gè)方法,發(fā)現(xiàn)這個(gè)方法能返回代理對(duì)象伐弹,顯然我需要Step Into到這個(gè)方法里拉馋。

Eclipse
如果想在Eclipse里執(zhí)行evalution或者叫Inspect,有兩種方式:

  1. 需要在window -> show view -> display打開(kāi)display面板惨好,然后在面板里執(zhí)行(ctrl+u)java語(yǔ)句。
    image.png

    image.png
  2. 選中語(yǔ)句随闺,右鍵 -> Inspect(快捷鍵是Ctrl+Shift+I):


    image.png

丟棄棧幀(Drop Frame)

大家應(yīng)該都遇到過(guò)調(diào)試代碼的時(shí)候想回到上一步日川,或者回到上一個(gè)調(diào)用方法的時(shí)候吧?IDE 為我們提供了一個(gè)Drop Frame的功能矩乐,可以讓我們丟棄當(dāng)前的棧幀龄句,如果不知道這個(gè)功能回论,你可能只能選擇重新啟動(dòng)debugger開(kāi)始調(diào)試,這樣效率有點(diǎn)低分歇。
假設(shè)有這樣的調(diào)用關(guān)系:methodA -> methodB -> methodC -> methodD
如下:
代碼調(diào)試到第51行沛厨,想看看從50進(jìn)入到methodD內(nèi)部調(diào)試捌肴,這個(gè)時(shí)候就可以使用丟棄棧幀了。在底下調(diào)用棧中右鍵methodC -> Drop Frame,就會(huì)回到methodB調(diào)用的那一個(gè)棧幀企垦。

image.png

Drop Frame.gif

智能步入(Smart Step Into)/步入選擇(Step Into Selection)

有時(shí)候調(diào)試代碼的時(shí)候會(huì)存在層層嵌套的情況,這個(gè)時(shí)候step into可能就沒(méi)這么好用了艺谆,選擇性的step into就顯得很重要了弊决。

IDEA

SmartStepInto.gif

Eclipse
Eclipse需要先選中想要Step Into的方法,然后按Ctrl+F5進(jìn)入擅威,如下:

StepIntoSelection.gif

變量斷點(diǎn)

變量斷點(diǎn)在變量初始化或者變量值改變的時(shí)候可以是程序停在變量值改變的那行代碼上壕探。


變量斷點(diǎn)

當(dāng)然,變量斷點(diǎn)也是可以設(shè)置condition的郊丛,如上圖李请。

方法斷點(diǎn)&&Force step into

方法上也是可以打斷點(diǎn)的,比如有時(shí)候我們想進(jìn)入到j(luò)dk內(nèi)部的方法里厉熟,因?yàn)閖dk的class在編譯的時(shí)候?yàn)榱斯?jié)省空間捻艳,去掉了調(diào)試信息,用普通的step into可能進(jìn)入不了方法內(nèi)部庆猫,這個(gè)時(shí)候可以在相應(yīng)的方法上打個(gè)斷點(diǎn)认轨,或者使用Force step into進(jìn)入到方法體內(nèi)部。

方法斷點(diǎn)

Force step into

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

idea中讓其他線(xiàn)程也在斷點(diǎn)中停下來(lái)月培。


image.png

通過(guò)Debugger窗口下拉菜單來(lái)切換線(xiàn)程:


image.png

eclipse中讓整個(gè)虛擬機(jī)都掛起嘁字,避免其他線(xiàn)程繼續(xù)執(zhí)行。


image.png

日志斷點(diǎn)(添加執(zhí)行語(yǔ)句)

有這樣一些場(chǎng)景:需要?jiǎng)討B(tài)插入一條執(zhí)行語(yǔ)句杉畜,或者調(diào)試的時(shí)候需要額外打印一些日志信息來(lái)協(xié)助觀察問(wèn)題纪蜒。有時(shí)候可能會(huì)選擇在代碼里寫(xiě)入一些語(yǔ)句,這樣會(huì)污染代碼而且可能忘記刪除或者注釋掉此叠,而且通過(guò)添加代碼的方式可能會(huì)導(dǎo)致整個(gè)項(xiàng)目重新編譯纯续,需要較長(zhǎng)時(shí)間。


image.png
image.png
image.png

紅框部分相當(dāng)于Log#info出來(lái)的信息灭袁。
當(dāng)然你也可以log出堆棧信息猬错,如下,勾選:


image.png

甚至你可以添加語(yǔ)句茸歧,然后讓debug的時(shí)候跳過(guò)這個(gè)斷點(diǎn)倦炒,不要停留,這樣你debug的時(shí)候斷點(diǎn)到這里就不會(huì)掛起:


image.png

強(qiáng)制返回(Force Return)

之前在windows上調(diào)試hadoop代碼的時(shí)候软瞎,有一段代碼要判斷可讀權(quán)限(boolean canRead())逢唤,總是返回false導(dǎo)致程序異常而執(zhí)行中斷拉讯,然后發(fā)現(xiàn)可以在進(jìn)入某個(gè)方法后強(qiáng)制返回,強(qiáng)制返回一個(gè)true就不會(huì)出錯(cuò)了鳖藕。

ForceReturn.gif

只要在對(duì)應(yīng)的方法上執(zhí)行:右鍵 -> Force Return就可以編寫(xiě)返回語(yǔ)句了魔慷。可以編寫(xiě)負(fù)責(zé)語(yǔ)句著恩,也可以調(diào)用方法院尔。
多語(yǔ)句

調(diào)用方法

本文的錄屏軟件使用的是ScreenToGif.exe。

未完待續(xù)页滚,持續(xù)更新召边。。裹驰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隧熙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子幻林,更是在濱河造成了極大的恐慌贞盯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪饺,死亡現(xiàn)場(chǎng)離奇詭異躏敢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)整葡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)件余,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人遭居,你說(shuō)我怎么就攤上這事啼器。” “怎么了俱萍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵端壳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我枪蘑,道長(zhǎng)损谦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任岳颇,我火速辦了婚禮照捡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赦役。我一直安慰自己麻敌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布掂摔。 她就那樣靜靜地躺著术羔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乙漓。 梳的紋絲不亂的頭發(fā)上级历,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音叭披,去河邊找鬼寥殖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涩蜘,可吹牛的內(nèi)容都是我干的嚼贡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼同诫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粤策!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起误窖,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叮盘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后霹俺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柔吼,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年丙唧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愈魏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡想际,死狀恐怖培漏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沼琉,我是刑警寧澤北苟,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站打瘪,受9級(jí)特大地震影響友鼻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闺骚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一彩扔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僻爽,春花似錦虫碉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)须板。三九已至,卻和暖如春兢卵,著一層夾襖步出監(jiān)牢的瞬間习瑰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工秽荤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甜奄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓窃款,卻偏偏與公主長(zhǎng)得像课兄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晨继,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • Android Studio目前已經(jīng)成為開(kāi)發(fā)Android的主要工具烟阐,用熟了可謂相當(dāng)順手。作為開(kāi)發(fā)者踱稍,調(diào)試并發(fā)現(xiàn)b...
    StChris閱讀 1,793評(píng)論 0 16
  • Android Studio目前已經(jīng)成為開(kāi)發(fā)Android的主要工具曲饱,用熟了可謂相當(dāng)順手。作為開(kāi)發(fā)者珠月,調(diào)試并發(fā)現(xiàn)b...
    7d3fadbb4407閱讀 558評(píng)論 0 3
  • Android Studio目前已經(jīng)成為開(kāi)發(fā)Android的主要工具扩淀,用熟了可謂相當(dāng)順手。作為開(kāi)發(fā)者啤挎,調(diào)試并發(fā)現(xiàn)b...
    涅槃1992閱讀 50,735評(píng)論 36 365
  • 談判就是給利益給痛苦驻谆。 當(dāng)你和對(duì)方談的時(shí)候,你手中的牌越多庆聘,你對(duì)他的影響就越大胜臊。 也就是你有讓對(duì)方快樂(lè)和痛苦的能力...
    王楓浚閱讀 170評(píng)論 0 0
  • 今天我家這里下雨了,我媽接我放學(xué)一點(diǎn)也不好走伙判,還好早上我爸的朋友送我去的 象对。然后又因?yàn)榉N種原因我和我媽吵了起來(lái),...
    唯左閱讀 91評(píng)論 0 0