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

80%的程序員都不了解的調試技巧

開發 開發工具
今天我們來談談調試代碼的一些技巧,在使用IDE提供的debugger時一些快速定位問題的方式。

程序員的工作內容,除了大部分時間寫代碼之外,因為有不少的時間是用在調試代碼上。甚至說不是在調試代碼,就是即將調試代碼。 :)

今天我們來談談調試代碼的一些技巧,在使用IDE提供的debugger時一些快速定位問題的方式。

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

下面進入正題。

1.多線程調試

開發過多線程應用的朋友應該有體會,有些時候,為了觀察多個線程間變量的不同狀態,以及鎖的獲取等,就會想到在代碼里加個斷點debug一下。

在IDE里斷點停下來的時候,可以切換到另外的線程中,跑其他的代碼,不會互相影響。當然,這里是有個開關的,在Eclipse里默認開啟,

但是在IntelliJ IDEA里默認是沒有開啟的。也就是說如果你在IDEA里代碼里加斷點,雖然一個線程的斷了下來,但其他線程的已經執行過了。此處把線程的suspend設置成和Eclipse模式一樣之后,也可以開始多線程應用的調試。簡單設置可以直接在斷點處,將suspend改成Thread

一個線程斷下來之后,可以通過在線程窗口切換,到其它線程中繼續運行。

IntelliJ IDEA里在這兒切換

我們看到main線程和pool-1-thread-1這兩個線程都處于RUNNING狀態,切換到任何一個都可以繼續運行。

此時,就可以寫一個多線程的應用,同時向ArryList這一類非線程安全的容器中存放內容,然后觀察為什么他們是線程不安全的,會出現什么問題,生動又形象。

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

2.后退執行

這里所說的后退執行,是有些時候我們在debug代碼時,懶的每個方法都進入單步調試,就會出現你觀察一個變量值的變化時,某個方法沒跟進去,結果值就變了,不得不重來一次。

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

有了這個功能,我們在Drop 了當前這個Frame之后,已經改變的變量值不會恢復。比如你向當前調用方法里傳入了一個List,并且在方法中向List里添加了內容,那在Drop到調用該方法的地方時,List不會恢復到之前的狀態。

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

3.條件斷點

為了調試代碼,就需要在要觀察變更的地方添加斷點,然后小心翼翼的一步步執行。但是如果是在一個循環里,又或者該方法會被多線程同時調用到的時候,你小心的向下單步調試,發現沒有你關心的內容,又從循環開始處跑下來,還是沒你的內容,人就開始煩燥起來。

其實,在添加斷點的時候,我們可以為斷點增加一定的條件,這樣,在指定的條件滿足時,斷點才會生效。

IntelliJ IDEA內,在斷點上右擊,會彈出如下圖的條件框,輸入指定的條件即可。

有了條件斷點,不相關,不感興趣的代碼就可以直接跳過了。

4.片斷代碼

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

在IDEA里有一個執行代碼片斷的功能,可以在當前代碼的上下文內,執行你臨時寫的代碼。

例如,當前方法傳入一個List,但這個方法里少一個你后面條件需要使用到的元素,此時你可以臨時使用片斷代碼執行的功能,添加一個進去。

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

這就就相當于臨時改變了變量內容。

然后,還可以調用對象的方法,執行功能,獲取屬性值等。

5.查看變量修改值

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

【本文為51CTO專欄作者“侯樹成”的原創稿件,轉載請通過作者微信公眾號『Tomcat那些事兒』獲取授權】

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

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2013-06-03 11:24:45

程序調試Java

2021-03-02 18:37:18

commit程序員公司

2011-03-29 15:44:41

對日軟件外包

2019-04-03 09:10:35

Rediskey-value數據庫

2019-11-21 15:08:13

DevOps云計算管理

2014-06-16 10:03:54

分組交換

2020-11-30 06:27:35

Java泛型Object

2020-04-20 10:55:57

大數據人工智能技術

2020-09-16 07:59:40

數組內存

2020-07-07 07:34:29

RedisSDS數據結構

2010-08-19 10:12:34

路由器標準

2018-07-16 09:00:32

LinuxBash數組

2017-03-13 17:25:00

移動支付技術支撐易寶

2015-08-11 09:20:51

初級程序員Linux命令

2012-08-14 10:15:46

程序員

2021-02-20 11:04:40

C++VS代碼調試

2014-03-25 10:35:35

程序員代碼調試

2015-12-24 10:28:37

程序員面試技巧

2015-10-30 09:49:30

2018-05-23 14:22:27

程序員技能溝通
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品视频一区 | 精品不卡| 精品国产一区二区三区观看不卡 | www四虎影视 | 男女午夜免费视频 | 综合国产| 久久天堂| 国产精品一区二区三区在线 | 日韩欧美视频 | av在线天堂 | 色吊丝2288sds中文字幕 | 狠狠操狠狠干 | 日韩中文字幕在线播放 | 精品视频一区二区三区四区 | 日韩在线视频观看 | 久久久av | 一区二区免费在线观看 | 国产一二三区在线 | 国产精品高潮呻吟 | 国产精品国产三级国产aⅴ无密码 | 国产亚洲精品精品国产亚洲综合 | 夜夜骑天天干 | 99久久精品国产一区二区三区 | 蜜桃av鲁一鲁一鲁一鲁 | 欧美亚洲一区二区三区 | 久久综合爱 | 国产在线播放一区二区三区 | 一本一道久久a久久精品蜜桃 | 伊人成人免费视频 | 亚洲精品一 | 亚洲精品乱码久久久久久按摩观 | 亚洲国产成人在线观看 | 午夜激情影院 | www.一区二区 | 色婷婷av99xx | 欧美一区二区三区在线视频 | 91精品国产综合久久久久蜜臀 | 国产精品自产拍 | 久久se精品一区精品二区 | 亚洲欧美国产精品一区二区 | 亚洲欧美中文日韩在线v日本 |