同学,解决下这个 Bug!
一些解決 Bug 的小技巧
大家好,我是魚皮。
學(xué)編程的過程中,我們會遇到各式各樣的 Bug,也常常因?yàn)樗鼈兌械筋^禿。
但隨著你不斷解決 Bug、積累經(jīng)驗(yàn),就會發(fā)現(xiàn)其實(shí)解決 Bug 也是有套路的。
今天分享下魚皮自己總結(jié)的解決 Bug 套路,幫助大家提高編程學(xué)習(xí)效率,保護(hù)頭發(fā)。
解決 Bug 套路總結(jié)
本文大綱:
魚皮 - 解決 Bug 套路總結(jié)準(zhǔn)備工作
其實(shí)改 Bug 的過程就跟破案是一樣的。
首先,在急著去搜索問題、上手寫代碼改 Bug 之前,先做這么幾件事。
1. 獲得更多信息
就像案發(fā)現(xiàn)場找目擊者、搜集證據(jù)一樣。
我們要搞清楚 Bug 何時發(fā)生?為什么會發(fā)生?在什么情況下發(fā)生?
用戶到底做了什么操作,才導(dǎo)致了 Bug ?
是每次都會出現(xiàn) Bug,還是說點(diǎn)兒背觸發(fā)了呢,如果是偶然觸發(fā),是否可復(fù)現(xiàn)呢?
不能復(fù)現(xiàn)的 Bug,還叫 Bug 么?
這些信息,都很重要。如果可以的話,最好還能拿到用戶詳細(xì)的報錯原因、請求和響應(yīng),信息多了,才能幫助我們更精準(zhǔn)地定位和分析問題。
2. 明確邊界
說白了,就是通過手上已有的信息,搞清楚要把這個 Bug 算在誰的頭上?
舉個例子,假如說用戶突然訪問不了你的網(wǎng)站了。這時千萬別自己先擱那傻傻分析和排查一通,而是可以先訪問下網(wǎng)站試試。要是你能訪問的話,說不定根本就不是 Bug,而是用戶自家的網(wǎng)線斷了!
企業(yè)開發(fā)中往往是多人協(xié)作,比如前端和后端、服務(wù)提供者和服務(wù)調(diào)用者,如何判斷是誰寫的 Bug 呢?
一般我們可以通過 接口 的請求參數(shù)和響應(yīng)參數(shù)來劃分職責(zé)。
比如我是前端,請求你后端的接口,向你發(fā)送 "魚皮",你必須要返回我 "狗頭"。結(jié)果最后出現(xiàn) Bug 時,我一看,我給你發(fā)送的是 "魚皮",你卻給我 "魚頭" 了對吧,那顯然是你那邊的 Bug,雨我無瓜。
3. 保護(hù)現(xiàn)場
確定是自己的 Bug 后,如果是線上程序出了 Bug,記得先把當(dāng)時的程序狀態(tài)保留下來,比如 dump 內(nèi)存、下載日志,便于后面排查。
就和破案一樣,案發(fā)現(xiàn)場的東西千萬不能隨便亂碰,要不然可能就缺失了關(guān)鍵信息。
接下來看看如何解決 Bug。
自行解決
每個人的時間都很寶貴,出了問題時,建議先不要盲目地去問別人,而是自力更生,可以通過以下方式自己解決。
1. 自查
程序除了問題時,最直接的排查方式就是:對程序的報錯、已記錄的錯誤日志進(jìn)行分析。
比如看到程序報錯 "db connection timeout",顯然就是數(shù)據(jù)庫連接超時了,這個時候可以先去確認(rèn)下是不是網(wǎng)絡(luò)和數(shù)據(jù)庫自身的問題,說不定就已經(jīng)能解決 Bug 了。
2. 搜索引擎
俗話說得好,遇事不決問某度,這可能是大家最常用的解決 Bug 手段了。
但如今的某度搜索引擎對程序員不太友好,廣告多、內(nèi)容過時、點(diǎn)進(jìn)去后文不對題,這些都會成為你搜索的障礙。
那大家不妨試試這些技巧:
屏蔽廣告
在搜索詞后加上 "-advertisement" 可以快速屏蔽搜索的廣告信息:
站內(nèi)搜索
使用 site:域名 + 搜索詞,可以在特定的網(wǎng)站內(nèi)快速搜索,像現(xiàn)在大部分 Bug 的解決方案其實(shí)都在 CSDN:
關(guān)鍵詞搜索
使用某度搜索長句的時候,可以將錯誤信息中的關(guān)鍵詞拆解出來,比如版本號、數(shù)據(jù)庫類型等,使用空格進(jìn)行連接疊加關(guān)鍵詞,可以更加精準(zhǔn)搜索想要的結(jié)果,避免連接詞的干擾。
限定范圍
打開搜索工具,可以給搜索增加限定,比如時間、文件類型等:
當(dāng)然,其他的搜索引擎也都有自己的搜索技巧,大同小異。
此外,大家也可以試試 開發(fā)者搜索 ,專門面向程序員的搜索引擎,純凈很多。而且看起來它的實(shí)現(xiàn)方式也很簡單,就只從開發(fā)者相關(guān)網(wǎng)站中搜索內(nèi)容就行了。
開發(fā)者搜索3. 官方文檔
當(dāng)我們使用一些冷門技術(shù)或者較新的技術(shù)時,國內(nèi)的搜索引擎可能很難找到解決方案。
這時不妨打開官方文檔,直接搜索到和自己問題相關(guān)的部分,仔細(xì)閱讀一遍,說不定就發(fā)現(xiàn)其實(shí)是自己語法或參數(shù)寫錯了呢?
在官方文檔搜索內(nèi)容其實(shí),很多 Bug 就是因?yàn)殚喿x文檔不仔細(xì)而產(chǎn)生的!
對于組件庫、SDK、類庫、插件、API 的使用,我其實(shí)更傾向于去閱讀官方文檔,比較直接,一針見血。
4. Github
如果你使用的是開源的項(xiàng)目,那么可以試著在項(xiàng)目倉庫的 issues 中搜索答案,尤其是知名項(xiàng)目,用的人很多,你遇到的 Bug 有可能別人也遇到過。
搜索 Bug如果有解決方案呢可以直接照搬,哪怕沒有解決方案,你也可以試著聯(lián)系遇到類似 Bug 的同學(xué),共同探索。
5. 追溯源碼
除了依賴沖突、內(nèi)存溢出之類的技術(shù)上的 Bug,其實(shí)我們工作中更多地是修復(fù)業(yè)務(wù)邏輯上的 Bug。比如做一個支付功能,用戶 A 扣了錢,但是沒有任何反應(yīng)。
那么這種情況也別費(fèi)功夫在網(wǎng)上搜了,因?yàn)槊總€人寫的業(yè)務(wù)代碼都不一樣,五花八門。不如自己從程序的入口開始,用 Debug 打些斷點(diǎn)、打印一些變量信息,一行一行慢慢調(diào)試就好了。
打斷點(diǎn)調(diào)試如果你懷疑是某個依賴的類或方法出了問題,也可以直接點(diǎn)進(jìn)去查看它的源碼和注釋。
尋求幫助
如果自己無法解決問題,我們就只能向他人求助了。
提問技巧
提問也是有技巧的,想要更快、更準(zhǔn)確地獲得答案,就要把你的問題、場景、前因后果、關(guān)鍵信息都提供清楚,還可以利用 PasteBin ?之類的工具分享代碼,讓別人更好讀懂。
像我每天都會收到上百條私信提問,其中很多同學(xué)連自己要問什么都描述不清楚,比如:我網(wǎng)站為啥無法訪問了?
這種問題我怎么幫你解決呢?這不是耽誤彼此的時間么?
所以我建議大家去閱讀《提問的智慧》這本免費(fèi)小書,教你成為一個有智慧的提問者。
地址:https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way
途徑
想好問什么之后,找誰問呢?
首先是兩大平臺:國內(nèi)的 CSDN 相對適合初學(xué)者;國外的 Stack Overflow ,更活躍、解答人數(shù)會更多。
Stack Overflow如果是開源項(xiàng)目,可以考慮在 GitHub 項(xiàng)目倉庫下自己提一個新的 Issues ,艾特團(tuán)隊(duì)官方人員去解決。
如果你用了別人提供的類庫和服務(wù),可以在官方文檔中找到項(xiàng)目的維護(hù)者,聯(lián)系他們并反饋。
此外,你也可以加一些專業(yè)人員的好友、加些編程交流小隊(duì)之類的抱團(tuán)取暖,都是不錯的。
最后,如果以上方法都解決不了 Bug,那不妨試一試:重啟 !
重啟大法好,Bug 逃不了。重啟還不行,那就卸載重裝~
以上就是本期分享,我是魚皮,求個 點(diǎn)贊 + 在看 ,這將是我持續(xù)創(chuàng)作的最大動力,謝謝 ????
往期推薦
這行代碼,很溫暖!
為什么我總寫 Bug ?
今年最值得看的一篇文章!
多環(huán)境
大廠的 SDK 寫法,偷學(xué)到了!
總結(jié)
以上是生活随笔為你收集整理的同学,解决下这个 Bug!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 Git Extensions 简单
- 下一篇: 调整 Docker 中 nginx 的日