最近整理了我原創的 140 篇程式設計經驗和技術文章,歡迎大家閱讀,一起成長!指路:https://t.1yb.co/ARnD
大家好,我是魚皮。
學程式設計的過程中,我們會遇到各式各樣的 Bug,也常常因為它們而感到頭禿。
但隨著你不斷解決 Bug、積累經驗,就會發現其實解決 Bug 也是有套路的。
今天分享下魚皮自己總結的解決 Bug 套路,幫助大家提高程式設計學習效率,保護頭髮。
解決 Bug 套路總結
本文大綱:
準備工作
其實改 Bug 的過程就跟破案是一樣的。
首先,在急著去搜索問題、上手寫程式碼改 Bug 之前,先做這麼幾件事。
1. 獲得更多資訊
就像案發現場找目擊者、蒐集證據一樣。
我們要搞清楚 Bug 何時發生?為什麼會發生?在什麼情況下發生?
使用者到底做了什麼操作,才導致了 Bug ?
是每次都會出現 Bug,還是說點兒背觸發了呢,如果是偶然觸發,是否可復現呢?
不能復現的 Bug,還叫 Bug 麼?
這些資訊,都很重要。如果可以的話,最好還能拿到使用者詳細的報錯原因、請求和響應,資訊多了,才能幫助我們更精準地定位和分析問題。
2. 明確邊界
說白了,就是通過手上已有的資訊,搞清楚要把這個 Bug 算在誰的頭上?
舉個例子,假如說使用者突然訪問不了你的網站了。這時千萬別自己先擱那傻傻分析和排查一通,而是可以先訪問下網站試試。要是你能訪問的話,說不定根本就不是 Bug,而是使用者自家的網線斷了!
企業開發中往往是多人協作,比如前端和後端、服務提供者和服務呼叫者,如何判斷是誰寫的 Bug 呢?
一般我們可以通過 介面 的請求引數和響應引數來劃分職責。
比如我是前端,請求你後端的介面,向你傳送 "魚皮",你必須要返回我 "狗頭"。結果最後出現 Bug 時,我一看,我給你傳送的是 "魚皮",你卻給我 "魚頭" 了對吧,那顯然是你那邊的 Bug,雨我無瓜。
3. 保護現場
確定是自己的 Bug 後,如果是線上程式出了 Bug,記得先把當時的程式狀態保留下來,比如 dump 記憶體、下載日誌,便於後面排查。
就和破案一樣,案發現場的東西千萬不能隨便亂碰,要不然可能就缺失了關鍵資訊。
接下來看看如何解決 Bug。
自行解決
每個人的時間都很寶貴,出了問題時,建議先不要盲目地去問別人,而是自力更生,可以通過以下方式自己解決。
1. 自查
程式除了問題時,最直接的排查方式就是:對程式的報錯、已記錄的錯誤日誌進行分析。
比如看到程式報錯 "db connection timeout",顯然就是資料庫連線超時了,這個時候可以先去確認下是不是網路和資料庫自身的問題,說不定就已經能解決 Bug 了。
2. 搜尋引擎
俗話說得好,遇事不決問某度,這可能是大家最常用的解決 Bug 手段了。
但如今的某度搜索引擎對程式設計師不太友好,廣告多、內容過時、點進去後文不對題,這些都會成為你搜索的障礙。
那大家不妨試試這些技巧:
遮蔽廣告
在搜尋詞後加上 "-advertisement" 可以快速遮蔽搜尋的廣告資訊:
站內搜尋
使用 site:域名
+ 搜尋詞,可以在特定的網站內快速搜尋,像現在大部分 Bug 的解決方案其實都在 CSDN:
關鍵詞搜尋
使用某度搜索長句的時候,可以將錯誤資訊中的關鍵詞拆解出來,比如版本號、資料庫型別等,使用空格進行連線疊加關鍵詞,可以更加精準搜尋想要的結果,避免連線詞的干擾。
限定範圍
開啟搜尋工具,可以給搜尋增加限定,比如時間、檔案型別等:
當然,其他的搜尋引擎也都有自己的搜尋技巧,大同小異。
此外,大家也可以試試 開發者搜尋
,專門面向程式設計師的搜尋引擎,純淨很多。而且看起來它的實現方式也很簡單,就只從開發者相關網站中搜索內容就行了。
3. 官方文件
當我們使用一些冷門技術或者較新的技術時,國內的搜尋引擎可能很難找到解決方案。
這時不妨開啟官方文件,直接搜尋到和自己問題相關的部分,仔細閱讀一遍,說不定就發現其實是自己語法或引數寫錯了呢?
其實,很多 Bug 就是因為閱讀文件不仔細而產生的!
對於元件庫、SDK、類庫、外掛、API 的使用,我其實更傾向於去閱讀官方文件,比較直接,一針見血。
4. Github
如果你使用的是開源的專案,那麼可以試著在專案倉庫的 issues
中搜索答案,尤其是知名專案,用的人很多,你遇到的 Bug 有可能別人也遇到過。
如果有解決方案呢可以直接照搬,哪怕沒有解決方案,你也可以試著聯絡遇到類似 Bug 的同學,共同探索。
5. 追溯原始碼
除了依賴衝突、記憶體溢位之類的技術上的 Bug,其實我們工作中更多地是修復業務邏輯上的 Bug。比如做一個支付功能,使用者 A 扣了錢,但是沒有任何反應。
那麼這種情況也別費功夫在網上搜了,因為每個人寫的業務程式碼都不一樣,五花八門。不如自己從程式的入口開始,用 Debug 打些斷點、列印一些變數資訊,一行一行慢慢除錯就好了。
如果你懷疑是某個依賴的類或方法出了問題,也可以直接點進去檢視它的原始碼和註釋。
尋求幫助
如果自己無法解決問題,我們就只能向他人求助了。
提問技巧
提問也是有技巧的,想要更快、更準確地獲得答案,就要把你的問題、場景、前因後果、關鍵資訊都提供清楚,還可以利用 PasteBin
之類的工具分享程式碼,讓別人更好讀懂。
像我每天都會收到上百條私信提問,其中很多同學連自己要問什麼都描述不清楚,比如:我網站為啥無法訪問了?
這種問題我怎麼幫你解決呢?這不是耽誤彼此的時間麼?
所以我建議大家去閱讀《提問的智慧》這本免費小書,教你成為一個有智慧的提問者。
地址:https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way
途徑
想好問什麼之後,找誰問呢?
首先是兩大平臺:國內的 CSDN
相對適合初學者;國外的 Stack Overflow
,更活躍、解答人數會更多。
如果是開源專案,可以考慮在 GitHub 專案倉庫下自己提一個新的 Issues
,艾特團隊官方人員去解決。
如果你用了別人提供的類庫和服務,可以在官方文件中找到專案的維護者,聯絡他們並反饋。
此外,你也可以加一些專業人員的好友、加些程式設計交流小隊之類的抱團取暖,都是不錯的。
最後,如果以上方法都解決不了 Bug,那不妨試一試:重啟 !
重啟大法好,Bug 逃不了。重啟還不行,那就解除安裝重灌~
以上就是本期分享,我是魚皮,求個 點贊 ,這將是我持續創作的最大動力,謝謝