程式設計師是如何從複雜的程式碼裡找到 bug 的?
我曾經做了兩年大型軟體的維護工作,那個專案有 10 多年了,大約 3000 萬行以上的程式碼,參與過開發的有數千人,程式碼 checkout 出來有大約 5 個 GB,而且 bug 特別多,open 的有上千,即使最高優先順序的 showstopper 也有上百。分享下我的 debug 的經驗。
可重現的 bug 特別好找,反覆除錯測試就好了,先把好解決的幹掉,這樣最節約時間。
對於某些 bug 沒有頭緒或者現象古怪不知道從哪裡下手,找有經驗的同事問一下思路,因為在那種開發多年的大型系統裡,經常會反覆出現同樣原因的 bug,原因都類似,改了一處,過一陣子另外一處又冒出來,而且無法根治。
比如:我那個系統裡有個特別危險的 API,介面引數比較難用,一旦有人用錯了某些情況下就會出詭異的現象,解決很簡單,找到呼叫這個 API 的地方把呼叫方式寫對就好了。為什麼不根治呢?因為要保持相容性不能改介面了。Windows 系統裡就好多這種爛 API。問下老員工吧,說不定他們都遇到過好多次了。
有些 bug 現象不太明顯,那麼就想辦法增大它的破壞性,把現象放大。這只是個思路,具體怎麼放大隻能根據具體的程式碼來定。比如:美劇《豪斯醫生》裡有一集,懷疑病人心肺有問題,就讓病人去跑步機上跑步,加重心肺負擔,從而放大症狀。
把程式邏輯一點點註釋掉,看看還會不會出問題,類似二分查詢的方法,逐步縮小問題範圍。
有時候我會問自己,如果我要實現 bug 描述的現象我要怎麼寫程式碼才行?比如:我遇到一個死鎖問題,但是檢查程式碼發現所有的鎖都是配對的,沒有忘記解鎖的地方,而且鎖很簡單就是一個普通的臨界段,保護幾行賦值語句而已。這樣的程式碼怎麼寫才能讓他死鎖呢?我想如果讓我故意製造這樣一個現象,只有在上鎖的時候強制殺掉執行緒了。既然這樣就可以去看看有誰強殺執行緒了沒有。
針對某些 bug 編寫一些除錯輔助工具。比如,我那個系統沒有完善的崩潰報告,雖然也有 dump,但是分析出來的 callstack 經常不準。於是我為解決崩潰問題編寫了個工具,會自動掃描程式碼,在每個函式入口和出口插入 log,以此來定位崩潰點。
雖然這樣做有點不厚道,但是有時不得不這麼做。有些 bug 找不到真正的 root cause,但是又要在規定時間內解決,那麼我們就可以治療症狀而不去找病因。比如用 try catch 掩蓋一些奇怪的崩潰。不到萬不得已不要這麼幹,未來可能會付出更大代價。
後記:對於大部分轉行的人來說,找機會把自己的基礎知識補齊,邊工作邊補基礎知識,真心很重要。
via:
原文
原文連結:https://mp.weixin.qq.com/s/akBnfyP9nBD3XfpQ1fdkiQ
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559358/viewspace-2218222/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 菜雞程式設計師是如何寫程式碼的?程式設計師
- 論跟程式設計師談話的技巧:千萬不要跟程式設計師說,你的程式碼有bug程式設計師
- 降低程式碼的圈複雜度——複雜程式碼的解決之道複雜度
- 自學程式設計,如何找到自己的第一份程式設計師工作?程式設計師
- 程式設計師,熱愛你的 bug程式設計師
- 【科普】碼農是程式設計師嗎?碼農與真正程式設計師的區別是啥?程式設計師
- 碼教授告訴你IT程式設計師如何找到高薪職業程式設計師高薪
- 程式設計師敲程式碼時耳機裡聽的到底是什麼?程式設計師
- 面對一個Bug,高手程式設計師是如何解決問題的?程式設計師
- 程式設計師永遠不要再犯的5個程式設計bug程式設計師
- 程式設計實戰:如何管理程式碼裡的常量程式設計
- 程式設計師你是如何降低NPE的?程式設計師
- 你是如何看待男程式設計師的?程式設計師
- 程式設計師的差距在哪裡?程式設計師的三個級別,你在哪裡?程式設計師
- 不同人對BUG的反應,程式設計師:誰動了我的程式碼?程式設計師
- 程式設計師如何寫出好程式碼?程式設計師
- 如何從初級程式設計師變成高階程式設計師?程式設計師
- 【1024程式設計師節】程式設計師,你學程式設計的初衷是什麼?程式設計師
- “我男友是程式設計師,修BUG比我重要,服了!”程式設計師
- 《程式是怎樣跑起來的》,計算機程式很複雜嗎?計算機
- 程式設計師,你碰到過的最難調的Bug是什麼樣的?程式設計師
- 從程式碼的風格看出六種不同型別的程式設計師型別程式設計師
- 1024程式設計師節,向用程式碼改變世界的程式設計師致敬!程式設計師
- 非科班程式設計師和科班程式設計師的差距到底在哪裡?程式設計師
- 如何減小ABAP業務程式碼的複雜度複雜度
- 程式設計師你是如何使用映象中心Harbor的?程式設計師
- 如何從初級程式設計師順利晉升到高階程式設計師?程式設計師
- 從程式設計師的角度看 12306程式設計師
- 以前的程式設計師,現在的程式設計師程式設計師
- 大齡程式設計師的前途在哪裡?程式設計師
- 我是如何在自學程式設計9個月後找到工作的程式設計
- 現在的你,是開發工程師、程式設計師還是碼農?工程師程式設計師
- 程式設計師的悲哀是什麼?程式設計師
- 程式設計師正確看程式碼的方式程式設計師
- Google程式設計師的一天是如何度過的?Go程式設計師
- 如何從一個程式設計師走向成功?程式設計師
- 程式設計師的晉級之路:程式設計師如何快速工資翻倍?程式設計師
- 程式設計師 SEO 系列:如何找到更多搜尋關鍵詞?程式設計師