無(wú)論你是從事Android APP開發(fā) or Java后臺(tái)服務(wù)器開發(fā),我想大家應(yīng)該都知道IDEA的大名。如果你還一直躺在Eclipse的溫室中,那么也強(qiáng)烈建議的來(lái)試試IDEA,很香的!
調(diào)試,是每一個(gè)開發(fā)者必備的技能。常言道,眼過(guò)千遍不如手過(guò)一遍,手過(guò)一遍,不如Debug一遍!軟件調(diào)試技能是很好的區(qū)分程序員水平高低的一桿秤。下面為大家介紹幾個(gè)用起來(lái)爽到爆的調(diào)試技巧。
0x01 條件斷點(diǎn)調(diào)試過(guò)程中,循環(huán)語(yǔ)句經(jīng)常用到的一個(gè)技巧,比如:遍歷一個(gè)比較大的List的過(guò)程,想讓斷點(diǎn)停在某個(gè)特定值。如果你還停留在循環(huán)中間設(shè)置斷點(diǎn),然后不停地下一步,下一步......那么,請(qǐng)繼續(xù)看下去!
參考上圖,在斷點(diǎn)的位置,右擊斷點(diǎn)旁邊的小紅點(diǎn),會(huì)出來(lái)一個(gè)界面,在Condition這里填入斷點(diǎn)條件即可,這樣調(diào)試時(shí),就會(huì)自動(dòng)停在i=10的位置。
0x02 回到 “上一步”該技巧最適合特別復(fù)雜的方法套方法的場(chǎng)景,好不容易程序跑起來(lái),一不小心手一抖,斷點(diǎn)過(guò)去了,想回過(guò)頭看看剛才的變量值,如果不知道該技巧,只能重新運(yùn)行程序再跑一遍,你和他人的工作效率就是這樣一步一步拉開的。
如上圖,method1方法調(diào)用method2,當(dāng)前斷點(diǎn)的位置j=100,點(diǎn)擊上圖紅色箭頭位置的Drop Frame圖標(biāo)后,時(shí)間穿越了
回到了method1剛開始調(diào)用的時(shí)候,變量i變成了99,沒(méi)毛病吧,老鐵們,是不是很6!
0x03 多線程調(diào)試好奇心是人類進(jìn)步的階梯,如果想知道為啥這個(gè)功能叫Drop Frame,而不是類似Back To Previous 之類的,可以去翻翻JVM的書,JVM內(nèi)部以棧幀為單位保存線程的運(yùn)行狀態(tài),drop frame即扔掉當(dāng)前運(yùn)行的棧幀,這樣當(dāng)前“指針”的位置,就自然到了上一幀的位置。
多線程開發(fā),基本是每個(gè)開發(fā)者工作過(guò)程中不可避過(guò)的一道坎,也是每次求職必問(wèn)的高頻考點(diǎn)。多線程程序同時(shí)運(yùn)行時(shí),誰(shuí)先執(zhí)行,誰(shuí)后執(zhí)行,完全是看CPU心情的,無(wú)法控制先后,運(yùn)行時(shí)可能沒(méi)什么問(wèn)題,但是調(diào)試時(shí)就比較麻煩了,最明顯的就是斷點(diǎn)亂跳,一會(huì)兒停這個(gè)線程,一會(huì)兒停在另一個(gè)線程,比如下圖:
如果想希望下一個(gè)斷點(diǎn)位置是第2句詩(shī)句,可能要失望了:
如果想讓線程在調(diào)試時(shí),想按自己的愿意來(lái),讓它停在哪個(gè)線程就停在哪個(gè)線程,可以在圖中3個(gè)斷點(diǎn)的小紅點(diǎn)上右擊,
即:Suspend掛起的條件是按每個(gè)線程來(lái),而非All。把這3個(gè)斷點(diǎn)都這么設(shè)置后,再試一次
注意上圖中的紅框位置,斷點(diǎn)停下來(lái)時(shí),這個(gè)下拉框可以看到各個(gè)線程(注:給線程起個(gè)容易識(shí)別的名字是個(gè)好習(xí)慣?。覀兛梢赃x擇線程“天空中的飛鳥”,斷點(diǎn)如愿停在了第二句。
0x04 臨時(shí)執(zhí)行表達(dá)式/修改變量運(yùn)行值這也是一項(xiàng)很常用的功能,調(diào)試時(shí),可以臨時(shí)執(zhí)行一些表達(dá)式,參考下圖:點(diǎn)擊這二個(gè)圖標(biāo)中的任何1個(gè)都可以。
點(diǎn)擊+號(hào)后,就可以在新出現(xiàn)的輸入框里輸入表達(dá)式,比如i+5,然后回車,即可看到效果,具體可參照下面兩張圖。
當(dāng)然,如果調(diào)試時(shí),想動(dòng)態(tài)修改變量的值,也很容易,在變量上右擊,然后選擇Set Value,剩下的事,地球人都知道。
當(dāng)然,IDEA是支持遠(yuǎn)程調(diào)試的,限于篇幅,這里就不在進(jìn)行介紹了,感興趣的童鞋可以直接參考網(wǎng)上資料。