成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

80%的程序員都不了解的調(diào)試技巧

開發(fā) 開發(fā)工具
今天我們來談?wù)務(wù){(diào)試代碼的一些技巧,在使用IDE提供的debugger時(shí)一些快速定位問題的方式。

程序員的工作內(nèi)容,除了大部分時(shí)間寫代碼之外,因?yàn)橛胁簧俚臅r(shí)間是用在調(diào)試代碼上。甚至說不是在調(diào)試代碼,就是即將調(diào)試代碼。 :)

今天我們來談?wù)務(wù){(diào)試代碼的一些技巧,在使用IDE提供的debugger時(shí)一些快速定位問題的方式。

看到這里的朋友,不要馬上認(rèn)為我標(biāo)題黨,再往下看看,如果你還有一些更好用的技巧,歡迎留言。

下面進(jìn)入正題。

1.多線程調(diào)試

開發(fā)過多線程應(yīng)用的朋友應(yīng)該有體會(huì),有些時(shí)候,為了觀察多個(gè)線程間變量的不同狀態(tài),以及鎖的獲取等,就會(huì)想到在代碼里加個(gè)斷點(diǎn)debug一下。

在IDE里斷點(diǎn)停下來的時(shí)候,可以切換到另外的線程中,跑其他的代碼,不會(huì)互相影響。當(dāng)然,這里是有個(gè)開關(guān)的,在Eclipse里默認(rèn)開啟,

但是在IntelliJ IDEA里默認(rèn)是沒有開啟的。也就是說如果你在IDEA里代碼里加斷點(diǎn),雖然一個(gè)線程的斷了下來,但其他線程的已經(jīng)執(zhí)行過了。此處把線程的suspend設(shè)置成和Eclipse模式一樣之后,也可以開始多線程應(yīng)用的調(diào)試。簡(jiǎn)單設(shè)置可以直接在斷點(diǎn)處,將suspend改成Thread

一個(gè)線程斷下來之后,可以通過在線程窗口切換,到其它線程中繼續(xù)運(yùn)行。

IntelliJ IDEA里在這兒切換

我們看到main線程和pool-1-thread-1這兩個(gè)線程都處于RUNNING狀態(tài),切換到任何一個(gè)都可以繼續(xù)運(yùn)行。

此時(shí),就可以寫一個(gè)多線程的應(yīng)用,同時(shí)向ArryList這一類非線程安全的容器中存放內(nèi)容,然后觀察為什么他們是線程不安全的,會(huì)出現(xiàn)什么問題,生動(dòng)又形象。

PS: 這里順道說一下,這就是為什么創(chuàng)建線程時(shí)建議起一個(gè)有意義的名字,至少是可以識(shí)別的名字,否則在這里都不能區(qū)分出哪個(gè)是自己的線程,想切換還麻煩。

2.后退執(zhí)行

這里所說的后退執(zhí)行,是有些時(shí)候我們?cè)赿ebug代碼時(shí),懶的每個(gè)方法都進(jìn)入單步調(diào)試,就會(huì)出現(xiàn)你觀察一個(gè)變量值的變化時(shí),某個(gè)方法沒跟進(jìn)去,結(jié)果值就變了,不得不重來一次。

依靠后退執(zhí)行的功能,可以后退,就像下棋時(shí)悔棋那種功能一樣。當(dāng)然,這個(gè)后退招待的名字是我自己起的,在IDE里被稱為Drop Frame。

有了這個(gè)功能,我們?cè)贒rop 了當(dāng)前這個(gè)Frame之后,已經(jīng)改變的變量值不會(huì)恢復(fù)。比如你向當(dāng)前調(diào)用方法里傳入了一個(gè)List,并且在方法中向List里添加了內(nèi)容,那在Drop到調(diào)用該方法的地方時(shí),List不會(huì)恢復(fù)到之前的狀態(tài)。

但是在該方法再次被調(diào)用時(shí),你可以觀察List什么時(shí)候被改變的,至少不需要再重跑一遍程序了。甚至你可以一言不合就后退。

3.條件斷點(diǎn)

為了調(diào)試代碼,就需要在要觀察變更的地方添加斷點(diǎn),然后小心翼翼的一步步執(zhí)行。但是如果是在一個(gè)循環(huán)里,又或者該方法會(huì)被多線程同時(shí)調(diào)用到的時(shí)候,你小心的向下單步調(diào)試,發(fā)現(xiàn)沒有你關(guān)心的內(nèi)容,又從循環(huán)開始處跑下來,還是沒你的內(nèi)容,人就開始煩燥起來。

其實(shí),在添加斷點(diǎn)的時(shí)候,我們可以為斷點(diǎn)增加一定的條件,這樣,在指定的條件滿足時(shí),斷點(diǎn)才會(huì)生效。

IntelliJ IDEA內(nèi),在斷點(diǎn)上右擊,會(huì)彈出如下圖的條件框,輸入指定的條件即可。

有了條件斷點(diǎn),不相關(guān),不感興趣的代碼就可以直接跳過了。

4.片斷代碼

這個(gè)沒想好用什么名字來表述。有些時(shí)候在調(diào)試過程中,忽然想招待一段與此相關(guān),但不在源文件中的代碼來觀察一下,輔助進(jìn)行問題分析。此時(shí)你會(huì)停止程序,添加代碼然后重新跑一次嗎?

在IDEA里有一個(gè)執(zhí)行代碼片斷的功能,可以在當(dāng)前代碼的上下文內(nèi),執(zhí)行你臨時(shí)寫的代碼。

例如,當(dāng)前方法傳入一個(gè)List,但這個(gè)方法里少一個(gè)你后面條件需要使用到的元素,此時(shí)你可以臨時(shí)使用片斷代碼執(zhí)行的功能,添加一個(gè)進(jìn)去。

注意,在IntelliJ IDEA里,這個(gè)上面紅框,像個(gè)小計(jì)算器的按鈕就是臨時(shí)執(zhí)行的功能,點(diǎn)擊之后,會(huì)彈出按鈕下方這個(gè)Evaluate Expression的框,輸入代碼,點(diǎn)擊右下角的Evalute即可。返回值會(huì)顯示在Result處。

這就就相當(dāng)于臨時(shí)改變了變量?jī)?nèi)容。

然后,還可以調(diào)用對(duì)象的方法,執(zhí)行功能,獲取屬性值等。

5.查看變量修改值

每個(gè)IDE在調(diào)試代碼時(shí)都提供了一個(gè)觀察當(dāng)前上下文變量值的窗口。其實(shí)除了查看之外,一些非final的基本類型,還可以直接在此處修改值。這樣如果多次循環(huán)執(zhí)行時(shí),每次可以恢復(fù)到期望的值,不需要重啟程序。

【本文為51CTO專欄作者“侯樹成”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過作者微信公眾號(hào)『Tomcat那些事兒』獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2013-06-03 11:24:45

程序調(diào)試Java

2021-03-02 18:37:18

commit程序員公司

2011-03-29 15:44:41

對(duì)日軟件外包

2019-04-03 09:10:35

Rediskey-value數(shù)據(jù)庫

2019-11-21 15:08:13

DevOps云計(jì)算管理

2014-06-16 10:03:54

分組交換

2020-11-30 06:27:35

Java泛型Object

2020-04-20 10:55:57

大數(shù)據(jù)人工智能技術(shù)

2020-09-16 07:59:40

數(shù)組內(nèi)存

2020-07-07 07:34:29

RedisSDS數(shù)據(jù)結(jié)構(gòu)

2010-08-19 10:12:34

路由器標(biāo)準(zhǔn)

2018-07-16 09:00:32

LinuxBash數(shù)組

2017-03-13 17:25:00

移動(dòng)支付技術(shù)支撐易寶

2012-08-14 10:15:46

程序員

2015-08-11 09:20:51

初級(jí)程序員Linux命令

2021-02-20 11:04:40

C++VS代碼調(diào)試

2014-03-25 10:35:35

程序員代碼調(diào)試

2015-12-24 10:28:37

程序員面試技巧

2015-10-30 09:49:30

2018-05-23 14:22:27

程序員技能溝通
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 天天射网站 | 搞黄网站在线观看 | 一区二区精品在线 | www国产精品 | 久久成人精品视频 | 天天操夜夜爽 | www成年人视频| 91麻豆精品国产91久久久更新资源速度超快 | 国产精品99 | 网址黄| 91免费在线 | 黄页网址在线观看 | 欧美国产视频 | 日韩国产在线观看 | 亚洲欧美日韩一区 | 成人久久视频 | 99re在线视频 | 日韩一级黄色毛片 | 亚洲 中文 欧美 日韩 在线观看 | 欧美视频 亚洲视频 | 日韩高清黄色 | 国产日韩免费观看 | 日本aⅴ中文字幕 | 国产精品久久久久久久久免费 | a黄视频 | 欧美激情国产精品 | 91精品国产综合久久久久 | 99国产在线 | 成人激情视频免费在线观看 | 亚洲高清av在线 | 国产精品三级久久久久久电影 | 天天拍天天草 | 中文字幕一区二区三区日韩精品 | 国产精品中文字幕在线 | 国产视频在线观看一区二区三区 | 国产一区二区三区四区三区四 | 国产精品久久久久不卡 | 国产玖玖 | 亚洲欧美在线一区 | 久久中文字幕一区 | 中文字幕日韩一区 |