新聞中心
Debug是開(kāi)發(fā)人員必備的基礎(chǔ)技能,伴隨著開(kāi)發(fā)生涯,只要需要寫(xiě)代碼,就一定有debug的訴求... 因?yàn)榇蟛糠珠_(kāi)發(fā)同學(xué)都是用Debug來(lái)確認(rèn)程序是不是預(yù)期進(jìn)行(單元測(cè)試也可以)。

Debug一個(gè)非常常見(jiàn)的我們以為自己已經(jīng)熟練掌握的技能,有點(diǎn)像說(shuō)話一樣,每個(gè)人都可以把話說(shuō)出來(lái),但不是每個(gè)人都能表達(dá)出影響力...
大家都會(huì)Debug,不過(guò)有些Debug的方式可能確實(shí)會(huì)效率更高一些,還是直接進(jìn)入主題吧;
開(kāi)始Debug
相信大家都知道如何開(kāi)始Debug:
1、在Idea的某個(gè)程序文件的目標(biāo)行旁邊,點(diǎn)擊一下,設(shè)置個(gè)小紅點(diǎn)。即斷點(diǎn)
2、使用Debug按鈕運(yùn)行程序,如果程序可以走到斷點(diǎn)這里,就開(kāi)始進(jìn)入Debug模式。
3、基本操作就是:
- step in 進(jìn)入方法內(nèi)部
- step over 直接執(zhí)行到下一行
- step out 跳出當(dāng)前的方法
重復(fù)1,2,3步驟,剛開(kāi)始調(diào)試的時(shí)候主要就是這幾個(gè)步驟;
下面分享一下一些稍微隱藏一點(diǎn)的調(diào)試方法。
斷點(diǎn)相關(guān)經(jīng)驗(yàn)
只有滿足某些條件才會(huì)進(jìn)入斷點(diǎn)
如果說(shuō)Debug的位置是網(wǎng)關(guān)入口,那么流量會(huì)很大,各種類型的請(qǐng)求都會(huì)走到這個(gè)斷點(diǎn)里面,如果不能按照條件進(jìn)入斷點(diǎn),會(huì)非常影響我們的效率。
因?yàn)檫M(jìn)入斷點(diǎn)的請(qǐng)求,都不是我們想要的;這個(gè)時(shí)候可以對(duì)斷點(diǎn)設(shè)置條件,當(dāng)前請(qǐng)求中必須有滿足什么條件才會(huì)進(jìn)入Debug模式。
1、點(diǎn)擊程序的目標(biāo)行旁邊,生成一個(gè)小紅點(diǎn);2、右鍵小紅點(diǎn),可以在condition那里設(shè)置程序中的條件;
舉個(gè)例子,如下當(dāng)用Debug運(yùn)行的時(shí)候,是不會(huì)走到斷點(diǎn)的。
而且在設(shè)置完成斷點(diǎn)條件后,斷點(diǎn)旁邊會(huì)多出一個(gè)?和普通的斷點(diǎn)不同。
Debug斷點(diǎn)只生效一次,同時(shí)不阻塞系統(tǒng)
如果說(shuō)Debug某個(gè)正在運(yùn)行的系統(tǒng),默認(rèn)情況下會(huì)掛起所有的后續(xù)請(qǐng)求,很多人都以為系統(tǒng)死機(jī)了... 其實(shí)最后發(fā)現(xiàn)是你在調(diào)試。
有什么辦法,可以在調(diào)試的時(shí)候不阻塞剩余的請(qǐng)求嗎?1、默認(rèn)只斷點(diǎn)一次;2、斷點(diǎn)的時(shí)候不掛起整個(gè)系統(tǒng);
如下,通過(guò)斷點(diǎn)管理器器,進(jìn)入進(jìn)來(lái),或者右鍵斷點(diǎn),然后點(diǎn)擊more可以進(jìn)入進(jìn)來(lái) 設(shè)置掛起選項(xiàng),只掛起當(dāng)前正在調(diào)試的線程,然后再下面勾選一旦命中移除斷點(diǎn)。
靜態(tài)斷點(diǎn),只是想看程序會(huì)不會(huì)運(yùn)行到這里來(lái)(類似于動(dòng)態(tài)日志)
想確定請(qǐng)求能不能走到某個(gè)位置,但是又不想進(jìn)入debug模式,感覺(jué)太重了,能不能如果經(jīng)過(guò)這一行就直接打個(gè)日志呢?
這對(duì)于有時(shí)候程序的一些方法沒(méi)有打日志,但是又想確認(rèn)是不是能執(zhí)行到這里有幫助。
在斷點(diǎn)配置里面勾選,命中后打日志,也可以自己加一些其他的輸出:
- 不要掛起程序
- 命中處打日志
分組管理斷點(diǎn)(系統(tǒng)不同鏈路的斷點(diǎn))
系統(tǒng)常用的鏈路主要就幾條,而常調(diào)試問(wèn)題的地方也只有幾處,可以把這幾處位置的斷點(diǎn)管理起來(lái),在遇到問(wèn)題的時(shí)候直接把斷點(diǎn)分組管理拿出來(lái)就可以了。關(guān)注公眾號(hào):碼猿技術(shù)專欄,回復(fù)關(guān)鍵詞:1111 獲取阿里內(nèi)部Java性能優(yōu)化手冊(cè)
遠(yuǎn)程服務(wù)器Debug
這里主要是一個(gè)配置問(wèn)題,和本地Debug區(qū)別不大,學(xué)會(huì)配置就好了。啟動(dòng)程序的時(shí)候:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -jar 待發(fā)布的程序jar包名稱.jar
在Idea里面:
調(diào)試相關(guān)經(jīng)驗(yàn)
程序已經(jīng)進(jìn)入斷點(diǎn)了,這個(gè)時(shí)候要查問(wèn)題了,有一些需要了解的嗎。
快速執(zhí)行到某個(gè)位置
有時(shí)候我們的斷點(diǎn)沒(méi)有設(shè)置在某個(gè)位置,但是也不想設(shè)置在哪個(gè)位置;在Debug的時(shí)候想讓程序直接運(yùn)行到那個(gè)位置,怎么處理?
第一種方式:鼠標(biāo)移動(dòng)到對(duì)應(yīng)的行數(shù),然后按下run to cursor按鈕
第二種方式:直接點(diǎn)擊文件旁邊的數(shù)字即可,運(yùn)行到對(duì)應(yīng)的行哪里
回退重新開(kāi)始執(zhí)行
在一些復(fù)雜的鏈路中,方法調(diào)用很長(zhǎng),手一抖結(jié)果代碼又運(yùn)行了幾行,這個(gè)時(shí)候想去重新開(kāi)始執(zhí)行這個(gè)斷點(diǎn)怎么辦?
常規(guī)操作是再模擬發(fā)出個(gè)請(qǐng)求,重新進(jìn)入斷點(diǎn);但其實(shí)Idea已經(jīng)提供了對(duì)應(yīng)的方式,直接撤回當(dāng)前的幀即可,斷點(diǎn)會(huì)重新進(jìn)入方法開(kāi)始執(zhí)行。
在Frame的位置點(diǎn)擊撤回按鈕,就會(huì)重新進(jìn)入這個(gè)方法開(kāi)始運(yùn)行
中斷后續(xù)執(zhí)行鏈路
如果說(shuō)debug到一半發(fā)現(xiàn)可能會(huì)往數(shù)據(jù)庫(kù)寫(xiě)入臟數(shù)據(jù),想直接停止當(dāng)前的調(diào)試,怎么做?
同樣在幀的位置,右鍵,可以提前返回不繼續(xù)運(yùn)行,這個(gè)提前返回是針對(duì)當(dāng)前的方法的,也可以直接拋出異常;
調(diào)試Strem流
Java8之后的labmda表達(dá)式里面一般流程會(huì)多一點(diǎn),也不是很好調(diào)試,Idea也有對(duì)應(yīng)的工具,可以直接查看Strem流中的數(shù)據(jù),在Debug Window下發(fā),如果識(shí)別到labmda表達(dá)式后會(huì)展示出來(lái)。
斷點(diǎn)的時(shí)候運(yùn)行一些額外代碼
在Debug模式下,Idea提供了一個(gè)類似于解釋器的工具,可以輸入一些額外的程序在運(yùn)行,哪怕和本次debug無(wú)關(guān);
當(dāng)然有個(gè)店是這個(gè)表達(dá)式執(zhí)行只會(huì)返回最后y一行語(yǔ)句的結(jié)果。
總結(jié)
- debug代碼是一個(gè)常用而且很常見(jiàn)的技能,但是不是每個(gè)人都能很有效率的debug代碼...
- 有一些idea隱藏的debug方式,雖然一些人不關(guān)注,但是有用并且能極大提升效率
- 文章主要介紹一些一些在實(shí)際項(xiàng)目中相對(duì)有用的可以提升debug能力的一些經(jīng)驗(yàn)。最后如果說(shuō)實(shí)在是有問(wèn)題,但是又沒(méi)辦法進(jìn)入調(diào)試模式,可以考慮arthas的trace和watch。
文章名稱:這樣Debug,排查問(wèn)題效率大大提升...
網(wǎng)站網(wǎng)址:http://m.5511xx.com/article/coipcic.html
其他資訊
- 香港服務(wù)器安全工作的重要性及措施分析
- 網(wǎng)站效果圖應(yīng)該怎么制作,網(wǎng)站效果圖的重要性及制作方法介紹
- 掌握Linux內(nèi)核:如何準(zhǔn)備Linux內(nèi)核面試 (linux 內(nèi)核 面試)
- 網(wǎng)站后臺(tái)維護(hù)應(yīng)該注意哪些問(wèn)題,網(wǎng)站后臺(tái)維護(hù)的重要性
- 電腦開(kāi)機(jī)慢太卡腦開(kāi)機(jī)太卡,并且也沒(méi)有網(wǎng)了?(打不開(kāi)報(bào)超時(shí)錯(cuò)誤這個(gè)是做的我們當(dāng)?shù)鼐W(wǎng)信辦給的別名解析)


咨詢
建站咨詢
