1. 程式人生 > >程式猿如何快速高效的改 bug?改bug都有哪些技巧?

程式猿如何快速高效的改 bug?改bug都有哪些技巧?

看回答,有一些可操作性很強的答案。但是呢,你知道的,考試好不代表能力強,如果你只是學習別人的方法而並不理解,那麼學來之後只會是東施效顰而不能融會貫通。所以呢,我也來發表一下自己的見解。

首先,你要定位 bug。這時,你需要:

  1. 注重邏輯性。不要做沒有證據的結論。如果你有猜測,就去證實或者否定它。比如某次,同事程式碼返回的資料有問題,認為是快取用的 Redis 有問題,返回了錯誤的資料。然而沒人去對此猜測進行求證……我去確認了一下,Redis 收到了請求,並且響應正常。接下來,排除所有其它可能的原因之後,最後剩下的那個就是真相。真相就是,程式碼裡有個 } 的位置放錯了,因為它剛好在一屏之後的位置,所以沒有人發現……(是 Vim 幫我找到的)
  2. 基本的方法論。比如二分法。比如最小化測試用例。如果你要提問,要懂得提問的智慧,不管是向搜尋引擎還是向人,你都需要提出正確的問題。
  3. 知識面。你寫 Web 後端的話,普通的 HTTP 得懂,瀏覽器的開發者工具得會用。簡單的 JavaScript 也有會點兒。簡單地說就是,你要精於你自己主攻的部分,然後要熟悉你的上下游。再比如如果你使用 CPython 的話,你要準備一份 CPython 的原始碼,並且要能夠流暢地閱讀 C 程式碼。
  4. 工具。工欲善其事,必先利其器。一大堆除錯用的工具,你至少得知道它們能幹什麼,需要的時候能用。比如 strace、lsof、gdb、git bisect,還有高階點的 sysdig、systemtap、perf 等等。當然還有一堆不是專門為除錯而設計的通用工具,比如 the silver searcher 或者 ripgrep。一個快速的全文搜尋工具能幫你在最短時間內找到相關的程式碼或者日誌。你不必成為正則表示式大師,但是簡單的一定要會,不然面對上千個匹配結果你要怎麼辦呢?Vim 有一個外掛 Mark,能夠同時高亮多個模式,非常利於除錯期間閱讀程式碼和日誌。投入時間學習使用高效的工具,不要把時間浪費在等待和人工搜尋上,也不要讓自己忙於瑣事而斷了靈感和線索。

最後,不要不斷地、毫無目的地換個環境啦,換個版本啦,換個使用者啦,這樣子找問題。如果這樣做很有效的話,大家都去買彩票去了。

找到 bug 之後,理解它是如何產生的。當你理解之後才能真正修好它。就像你感冒了吃抗生素,根本沒有用。