看看大神們是怎麼解決一些 bng 的哪!!!!

2022-05-23 10:33:09 字數 1213 閱讀 2419

我曾經做了兩年大型軟體的維護工作,那個專案有10多年了,大約3000萬行以上的**,參與過開發的有數千人,**checkout出來有大約5個gb,而且bug特別多,open的有上千,即使最高優先順序的showstopper也有上百。

分享下我的debug的經驗

1. 優先解決那些可重現的,可重現的bug特別好找,反覆除錯測試就好了,先把好解決的乾掉,這樣最節約時間。

2. 對於某些bug沒有頭緒或者現象古怪不知道從**下手,找有經驗的同事問一下思路,因為在那種開發多年的大型系統裡,經常會反覆出現同樣原因的bug,原因都類似,改了一處,過一陣子另外一處又冒出來,而且無法**。

比如:我那個系統裡有個特別危險的api,介面引數比較難用,一旦有人用錯了某些情況下就會出詭異的現象,解決很簡單,找到呼叫這個api的地方把呼叫方式寫對就好了。為什麼不**呢?因為要保持相容性不能改介面了。windows系統裡就好多這種爛api。

問下老員工吧,說不定他們都遇到過好多次了。

3. 放大現象,有些bug現象不太明顯,那麼就想辦法增大它的破壞性,把現象放大。這只是個思路,具體怎麼放大只能根據具體的**來定。

比如:美劇《豪斯醫生》裡有一集,懷疑病人心肺有問題,就讓病人去跑步機上跑步,加重心肺負擔,從而放大症狀。

4. 二分法定位,把程式邏輯一點點注釋掉,看看還會不會出問題,類似二分查詢的方法,逐步縮小問題範圍。

5. 模擬現場,有時候我會問自己,如果我要實現bug描述的現象我要怎麼寫**才行?

比如:我遇到乙個死鎖問題,但是檢查**發現所有的鎖都是配對的,沒有忘記解鎖的地方,而且鎖很簡單就是乙個普通的臨界段,保護幾行賦值語句而已。這樣的**怎麼寫才能讓他死鎖呢?

我想如果讓我故意製造這樣乙個現象,只有在上鎖的時候強制殺掉執行緒了。

既然這樣就可以去看看有誰強殺執行緒了沒有。

6. 製作工具,針對某些bug編寫一些除錯輔助工具。

比如,我那個系統沒有完善的崩潰報告,雖然也有dump,但是分析出來的callstack經常不准。於是我為解決崩潰問題編寫了個工具,會自動掃瞄**,在每個函式入口和出口插入log,以此來定位崩潰點。

7. 掩蓋問題,雖然這樣做有點不厚道,但是有時不得不這麼做。有些bug找不到真正的root cause,但是又要在規定時間內解決,那麼我們就可以**症狀而不去找**。比如用try catch掩蓋一些奇怪的崩潰。不到萬不得已不要這麼幹,未來可能會付出更大代價。

我在做這份工作的時候也在追美劇《豪斯醫生》,豪斯大叔解決病症的思路和debug差不多,對我很有啟發。

工作3年,一些困惑,看看大家是怎麼想的

現在從事網際網路行業,總是感覺這個行業學的東西多,雜而不精,找不到能夠持續積累的東西,那麼我的疑問是 1 網際網路行業的新技術層出不窮,有哪些東西是可以讓我們開發者能夠長期積累的來保證我年過30仍舊具備競爭優勢 2 如果網際網路沒有的話,哪個行業有?傳統行業 比如電信方向,金融方向嗎?如果這樣的話,...

「驚群」,看看nginx是怎麼解決它的

在說nginx前,先來看看什麼是 驚群 簡單說來,多執行緒 多程序 linux下執行緒程序也沒多大區別 等待同乙個socket事件,當這個事件發生時,這些執行緒 程序被同時喚醒,就是驚群。可以想見,效率很低下,許多程序被核心重新排程喚醒,同時去響應這乙個事件,當然只有乙個程序能處理事件成功,其他的程...

「驚群」,看看nginx是怎麼解決它的

在說nginx前,先來看看什麼是 驚群 簡單說來,多執行緒 多程序 linux下執行緒程序也沒多大區別 等待同乙個socket事件,當這個事件發生時,這些執行緒 程序被同時喚醒,就是驚群。可以想見,效率很低下,許多程序被核心重新排程喚醒,同時去響應這乙個事件,當然只有乙個程序能處理事件成功,其他的程...