一、多線程調(diào)試斷點(diǎn)
Intellij IDEA
的debug
斷點(diǎn)調(diào)試是有一個(gè)模式的選擇的,就像下面這張圖,平時(shí)我們都使用的是默認(rèn)的 ALL
(在Eclipse
中默認(rèn)是線程模式) ,這種模式我們只能將一個(gè)線程斷下來(lái)税肪,但其他線程卻已經(jīng)執(zhí)行過(guò)了;而將其改為 Thread
后榜田,就可以多個(gè)線程都斷下來(lái)益兄,并且可以很方便的切換線程的執(zhí)行流程,這就是多線程調(diào)試箭券。
在debug
控制臺(tái)能夠很方便的查看線程的執(zhí)行狀態(tài)净捅,也可以很方便的選擇某個(gè)線程去執(zhí)行:
二、回退斷點(diǎn)
不知道大伙有沒(méi)有遇到這樣一個(gè)問(wèn)題辩块,當(dāng)我們進(jìn)行debug
時(shí)蛔六,通常不會(huì)進(jìn)入某個(gè)方法一步一步的執(zhí)行荆永,而是選擇性的跳過(guò);當(dāng)你想要回頭觀察某個(gè)變量的值得變化時(shí)国章,而你剛好沒(méi)有跟進(jìn)去具钥,跳過(guò)了這個(gè)方法,這個(gè)時(shí)候液兽,變量就被賦值了骂删,我們通常的做法是重來(lái)一次。
其實(shí)IDEA的調(diào)試功能是非常強(qiáng)大的四啰,我們來(lái)看看熟悉的調(diào)試窗口:
使用紅色框框出來(lái)的部分宁玫,表示當(dāng)前程序執(zhí)行到哪一塊,哪一部分柑晒,你可以嘗試用鼠標(biāo)點(diǎn)點(diǎn)看欧瘪,你會(huì)發(fā)現(xiàn)編輯器會(huì)跳轉(zhuǎn)到對(duì)應(yīng)的代碼中,當(dāng)然當(dāng)前斷點(diǎn)的位置通常會(huì)在列表的第一條匙赞。然后我們使用右鍵單擊佛掖,你就可以看到如下圖所示:
或者你也可以在下圖中找到 Drop Frame
:
在IDEA中,所謂的回退涌庭,叫 Drop Frame
苦囱,選擇Drop Frame
后,程序會(huì)跳轉(zhuǎn)回調(diào)用當(dāng)前這個(gè)方法的地方脾猛,當(dāng)然已經(jīng)改變的值是不會(huì)恢復(fù)的。但是當(dāng)該方法再次被調(diào)用時(shí)鱼鸠,你可以觀察到某個(gè)變量什么時(shí)候被改變猛拴,至少我們不用再去重新運(yùn)行一遍程序。
三蚀狰、條件斷點(diǎn)
條件斷點(diǎn)就是當(dāng)滿足某個(gè)條件(通常是表達(dá)式)時(shí)愉昆,debug
斷點(diǎn)才會(huì)生效;這在循環(huán)中debug
是非常有用的麻蹋;例如我們想要在循環(huán)體中調(diào)試:當(dāng)某個(gè)變量滿足某個(gè)條件時(shí)跛溉,需要斷點(diǎn)調(diào)試,來(lái)查看詳細(xì)的執(zhí)行流程及變化情況扮授。
我們說(shuō)過(guò)芳室,IDEA
中的debug
功能是非常強(qiáng)大的,要使用條件斷點(diǎn)也非常簡(jiǎn)單刹勃,下面這張圖片中 Condition
中的內(nèi)容代表當(dāng)name
為eamon:23
時(shí)堪侯,程序執(zhí)行到斷點(diǎn)處停下來(lái)。
有了條件斷點(diǎn)荔仁,這樣一來(lái)伍宦,那些不相關(guān)和我們不關(guān)心的代碼就可以直接跳過(guò)了芽死。
四、臨時(shí)斷點(diǎn)
所謂臨時(shí)斷點(diǎn)就是只斷一次次洼,IDEA
默認(rèn)斷點(diǎn)會(huì)一致存在关贵。如果你只需要暫停一次,那么使用臨時(shí)斷點(diǎn)會(huì)比較方便卖毁,因?yàn)闀和R淮沃髷帱c(diǎn)就自動(dòng)消失了揖曾,不用手動(dòng)取消。
臨時(shí)斷點(diǎn)可以通過(guò)在打斷點(diǎn)時(shí)按住 Alt
或者 option
鍵势篡,然后創(chuàng)建斷點(diǎn)翩肌。也可以通過(guò)右鍵斷點(diǎn)處,選擇 more
然后在窗口中選中 Remove once hit
五禁悠、求值計(jì)算
求值計(jì)算功能在我們debug
過(guò)程中念祭,可以很方便的查看程序中所有變量的值,也可以臨時(shí)修改程序中變量的值碍侦,這個(gè)功能能在一定程度上輔助我們進(jìn)行代碼調(diào)試眷细。
這個(gè)功能可以在debug
時(shí)在debug
窗口打開(kāi):
打開(kāi)后是這樣的:
然后你就可以在表達(dá)式輸入框中,輸入你想要的操作抑堡,比如按摘,查看變量、修改變量(臨時(shí)的)濒旦、調(diào)用某個(gè)方法等株旷;這些操作結(jié)果將會(huì)在下方的Result
窗口中輸出。