對于大部分開發(fā)人員來說,你所看到的絕大部分BUG已經(jīng)被別人修復(fù)并且分享出來了,這時候百度已經(jīng)足以幫你

但是你也有可能會遇到一些稀奇古怪的Bug,這時候你就需要靜下心來,好好的仔細(xì)研究一下了。下面,分享一下我偶然得到的心得體會。
首先,找出Bug
換環(huán)境
換用戶
換數(shù)據(jù)
換瀏覽器
換版本
換種操作
找到Bug之后,再搞清楚下面這幾個問題:
這個BUG出現(xiàn)需要的環(huán)境是什么?
這個BUG之前沒有,現(xiàn)在出現(xiàn)了,中間都動了什么?
這個BUG出現(xiàn)的情況是什么
什么樣的神級操作才會出現(xiàn)這種Bug
找到Bug的問題,就可以針對性的解決了

下面主要再給大家列出一些常見的疑難BUG的診斷方法:
1.?輸出結(jié)果與預(yù)期不符,這種BUG一般都是由于代碼邏輯錯誤造成的,如果能在開發(fā)環(huán)境重現(xiàn),最好解決方法就是單步調(diào)試,設(shè)定每一步代碼的預(yù)期結(jié)果,然后跟蹤判斷實(shí)際結(jié)果是否與預(yù)期結(jié)果一致,不一致的分析原因,如果在開發(fā)環(huán)境無法重現(xiàn),無法單步調(diào)試的,可以采用添加輸出日志的方式判斷哪一步的問題。

2.?系統(tǒng)異常報(bào)錯,這種情況下需要提取日志,找出錯誤堆棧信息,這時候最重要的事情是要把堆棧信息看懂、看完整。這是很多經(jīng)驗(yàn)不足的程序員常見的問題,就知道報(bào)錯了,報(bào)的什么錯,這個錯代表什么一概不知。而且往往堆棧信息是一個套一個輸出的,比如Java里面表象上看是一個NullPointer Exception,但是如果你看到底,就會告訴你到底是什么錯誤引發(fā)了這個NullPointer。

3.?系統(tǒng)Crash,這個問題常見的原因是負(fù)載過高、并發(fā)過高、或者配置錯誤。最常見的就是內(nèi)存溢出。這時候要首先排除配置錯誤的原因,主要靠查看Crash Log來分析原因,如果Crash?Log沒有有用的信息,就得排查硬件、內(nèi)存、網(wǎng)絡(luò)等方面的設(shè)置,看是否有配置錯誤的地方。再找不到就在測試環(huán)境用開發(fā)模式進(jìn)行壓測和調(diào)試。
4.?系統(tǒng)響應(yīng)緩慢,這種問題一般是系統(tǒng)資源不足,

給一個解決Java應(yīng)用響應(yīng)緩慢的方法
通過這些步驟,找出那些功能、那個方法、那段代碼存在瓶頸和資源競爭,針對性的對這個地方進(jìn)行改造就行了。
最后,如果某個地方出現(xiàn)BUG實(shí)在找不出什么原因,機(jī)謀用盡,那就上我們的絕招“小黃鴨調(diào)試方法(Rubber?Duck Debugging)”吧。
1. 去買一只小黃鴨,黃色的小鴨子,一按就會嘎嘎嘎的那種,也可以用其他的玩意代替

2. 把小鴨子放到電腦屏幕上方面對著你,就下面這樣的

3. 打開你出問題的那段代碼,面對小鴨子,用手指著代碼,一行一行的給它解釋一下這行代碼是干什么的,為什么這么寫。
4. 現(xiàn)在知道問題在哪了吧?

不說了,我給我們辦公室批發(fā)小黃鴨去了