精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

懵逼了!一個歷時五天的Bug......

新聞
一個程序員在沒有成長為架構師之前,幾乎都要跟 Bug 為伴,程序員有很多時間都是花在了查找各種 Bug 上。

 一個程序員在沒有成長為架構師之前,幾乎都要跟 Bug 為伴,程序員有很多時間都是花在了查找各種 Bug 上。

我印象深刻的一個 Bug,是一個服務器網絡框架無鎖隊列的 Bug 。那個 Bug 連續查找了五天的時間,才***定位出來。

當時我們的分布式存儲系統出現了性能瓶頸,定位后發現瓶頸是在服務器網絡框架上,所以我們決定為此替換一個***研發的網絡框架。這個新的網絡框架為了追求高的性能,采用了無鎖隊列的設計。

***天編碼測試完成后,在測試環境跑,完全正常,特地搞了一堆 Log 來重放請求,程序跑得特別歡快。

解決了當時的性能瓶頸,感覺特別的開心,但好景不長,服務部署到現網環境,跑不到一個小時,就 Core Dump 了。

嘗試上線了幾次,每次都是跑半個多小時,就 Core Dump 。

當時的***反應是新網絡框架的問題,這是很直覺的反應,但很快就產生了懷疑,因為這個框架也有其它模塊在用,也沒產生問題,當時覺得詭異了。

仔細查看了代碼的修改記錄,特定檢查了版本管理系統的 Log,做了代碼 Diff,確定確實只有這部分的修改。

憑著經驗,我說服自己,這個時候應該堅信最明確的邏輯,不要走到其他歪路上去。

第二天,我把這個框架單獨拎了出來,特地寫了一個測試的模塊,并用測試代碼生成了一堆的請求數據,發送給測試模塊。

它瘋狂的運轉起來,跑了一個多小時,跑得很歡快,一切正常,啥 Bug 都沒有。

開大了并發,繼續壓,依然沒有問題。懵逼了!不知咋回事。再次小心得灰度系統上線,跑不到一個小時還是 Core Dump 了,這個時候,我開始懷疑人生了,這個是咋回事了,都想砸鍵盤了都。

然后我冷靜了下來,經驗告訴我,這時應該按照正常流程完整地跑一遍測試模塊。

于是我把那個測試模塊打包成了現網模塊,切走了一臺現網機器的流量,把測試模塊給上線到了一臺現網機器。

之后用工具往現網機器發送數據,不到一個小時,Core Dump 了。終于復現了這個 Corde Dump, 那一刻猶如哥倫布發現了新大陸,簡直欣喜若狂啊。這個時候已經是第三天了。

我復現了 Bug,但依然沒辦法定位出具體的原因。Core Dump 出來的棧是全亂的,沒有任何價值,接下來,就開始用 Log 跟蹤法了。

我依據數據的流轉過程,在每個關鍵點,都打上 Log,Log 包含了所在的函數,行數,程序邏輯的編號,全部的關鍵數據等等。

我仔細地設計了這個 Log,爭取打得不多不少,太多容易看暈頭,而且太多無效的信息,會掩蓋了真正的問題;太少,信息不足,又不足以判斷,所以這種情況下打 Log 也是個藝術活。

通過精心設計的 Log,終于發現數據在一個特定的環節混亂后,程序就一定會 Core Dump。

分析 Log , 發現數據包在***時刻是完整的,但包似乎出現了亂序和重復。這個時候,才開始意識到可能是無鎖隊列的問題,因為只有隊列出問題,包的進出順序才會亂掉。

然后又花了半天的時間,專門為無鎖隊列寫了測試用例,用數據瘋狂地懟。在測試環境,依然一切安好,但上線到正式環境,壓測半小時后,終于掛了。終于看到了勝利的曙光!這個時候已經是第四天了!

到現在已經很明確是無鎖隊列的問題了。但這個數據結構的代碼不到 200 行。我拉了兩個同事一起 Review,都沒發現問題。但就是 Core Dump 了。

奇葩了,又陷入了人生懷疑,開始懷疑內存,懷疑 CPU,結果換了機器,還是一樣。

后來,仔細地對比了現網環境和測試環境的區別,機器類型,操作系統版本都一樣。然后編譯器?咦!編譯器?上去看了一下,結果發現編譯器的版本不一樣!

這段時間我所使用的現網編譯環境升級了新的 GCC 版本,但測試編譯環境,還是舊的版本的。(這個也比較坑)

當時的直覺是肯定跟編譯器相關,但代碼都一樣,難道是編譯器 Bug?不可能吧 ?!

后來想,不如將它們轉換成匯編看看吧。于是用兩個版本的編譯器將 C 的代碼各自轉換成了匯編。然后 Diff 匯編代碼,哇!發現真的有一行是不同的!

后來自己分析對比,發現是因為我們開啟了 GCC ***級別的代碼性能優化,不同版本的 GCC 在一些沒有特定依賴的語句上的優化是不同的。

說人話,就是有一段代碼,如果加了鎖,兩個版本的編譯器下,都會產生一樣的匯編,如果沒有加鎖,代碼有一行的順序被調整了,當然,從編譯器優化的角度講是對的,是我們使用姿勢不對。

但無論怎么樣,終于找出了這個問題。蒼天啊! 找了五天呀!***當然是開開心心地上線了。

查這個 Bug 確實花費了很多的時間,不過也是沒辦法,你不解決 Bug,就不能上線,但中間也收獲不少,特別是對編譯器優化有了很深的印象,也算是為自己的查 Bug 能力,又貢獻了一波經驗吧。

對于 Bug , 我分享下自己的一些認識和建議。

面對 Bug 的態度

只要你持續地寫代碼,就一定會持續的產生 Bug,所以***個事情是要擺正對 Bug 的心態。我遇到過兩個極端。

***個極端

遇到過一個 Leader,對系統質量相當重視,對我們寫的代碼要求很高,每次設計并寫完一個新的系統,他喜歡跟你算這次的系統上線,產生了多少次故障,這半年時間產生了多少個 Bug,每個 Bug 的影響范圍如何。

我們一堆人被搞得特別累,戰戰兢兢,到后面,大家都比較排斥去做優化,去重構代碼,只求無過,不求有功了。

所以,我覺得這種方式不好,對 Bug 帶著一種比較包容的態度去看待,可以減少不少的心理負擔。

第二個極端

后來去了一個新的團隊。新的團隊很重視業務和工程迭代的速度,所以對代碼質量和 Bug 的容忍度很高。如果是一個新上線的業務,是默許 Bug 存在的。

這種對質量過于松散的要求,在后面也帶來不好的影響。大家對 Bug 太免疫了,以至于出現 Bug 和故障的時候,大家都不夠緊張。

系統質量有一段時間出現比較大的問題,還因此被部門經理特訓了一番,后面通過各種措施,才慢慢提高了整體的系統質量。

上面兩種極端都不可取,應該很重視 Bug,盡量避免 Bug,但也不應該唯 Bug 多少論業績。

具體到 Bug 的查找上,我說說我的一些經驗。

Bug 的復現

我把 Bug 分為可重現的 Bug 和不可復現的 Bug 。

對于可重現的 Bug , 查找起來比較容易,比如可以用”二分查找“的方式,從模塊層面開始定位起,每次折半,每次折半地縮小范圍,一直到代碼層面。

在代碼層面,遵循一些常用的原則,比如:

  • 看到內存拷貝,直覺上要想到內存越界。
  • 看到數組,就要考慮是否索引越界。
  • 看到指針,就要考慮是否正確解構。
  • 看到多線程,就要考慮是否線程安全。
  • 對于不可重現的 Bug,***步就是要把它重現出來。

有時候特別的難,特別是并發形態下產生的 Bug,出現的時機和觸發條件都不清楚。對于這種 Bug,只能通過各種嘗試去復現它。

比如將多并發調整為單并發的方式,看能否復現,如果可以復現,就可以轉化為可復現的 Bug,用”二分查找“的方式去排查。

如果不能復現,那極大概率是并發問題。這個時候***先停止排查,仔細分析程序在并發狀態下可能出問題的點。

大部分并發問題的根源,是互斥數據沒有被正確讀寫,或者一些共享狀態被錯誤修改。

靜態代碼檢查

利用 Coverity 等代碼檢查工具進行代碼的靜態檢查可以發現很多潛在的問題,而且修復的成本很低。團隊后來引入了這個檢查工具,確實帶來了不錯的效果。類似變量未初始化,疑似的內存越界等都有可能被檢查出來。

編譯器的 Warning。有些同學一開始的時候對 Warning 不重視。我們團隊早期也遇到過這個情況。

那時候產品迭代的速度很快,所以大家寫完代碼,能夠編譯通過,就進行各種測試,然后準備上線了。

一開始的一兩個 Warning,不太理會。后面發現越積越多,到***終于成為一個不得不解決的問題。

部門還為此特地立項,來消除 Warning。先是在內部多次強調了這個理念,然后從基礎庫,基礎模塊開始實施,基礎代碼部分統一 Fix Warning,然后開啟編譯器把 Warning 當 Error 的開關。

完成之后,再逐步地推業務模塊進行修改。反正折騰了好一段時間。

工欲善其事必先利其器

代碼 Bug 出現的時候,善用一些排查工具可以極大得提升效率。比如對于 C/C++ 的 GDB 調試,內存泄漏時候 Valgrind 的檢測,Linux 下面用 Perf Top 來析 CPU 的消耗等。

一開始的時候,我對這些工具不重視,老是覺得真正使用的時候,去查文檔就行。

后面才發現,用工具查著問題時候,遇到不會用的命令或功能,再去查文檔,是個痛苦的事情,來回切換的開銷也使得效率低下。

后面就對這些輔助工具的使用重視了起來,專門花時間去學習和練習使用,反而提升了不少的效率。

打 Log 的藝術

很多時候,出現一個 Bug,未能定位出來,需要打上更多額外的 Log 來輔助排查。一開始的時候,是想到一點,打一個 Log,后面發現這么做沒有章法,邏輯不清晰, 排查效率低下。

后來學會了,遇到 Bug 后,先在腦子里面分析一番,然后花一兩個小時詳細地設計 Log 的格式和打 Log 的位置。發現這種方式對查問題的效率提升很大。

所以遇到 Bug 的時候不要急躁,先靜下來心來分析,在腦海里盡力重現出完整的運行邏輯,然后仔細地進行 Log 設計,包括 Log 包含的字段,打 Log 的點等。這樣能極大的提升排查問題的效率。

結語

Bug 是程序員最不愿意面對,但又經常出現的一個 “詭異生物“。對待 Bug 要有正確的心態,***不要跟業績強綁定,也不能太過于疏忽。

Bug 的排查是個很復雜的事情,每個人都有自己的方式和做法,如果你有好的做法和建議,也歡迎在留言區分享給大家!

 

 

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2020-12-23 09:04:56

開發雙引號數據

2024-01-12 16:20:04

2020-07-31 08:06:39

MySQL遞歸查詢

2025-02-13 07:00:00

Dubbo-goJava服務端

2009-09-14 17:08:02

WebFormView

2021-10-08 07:50:57

軟件設計程序

2021-10-27 09:20:56

Bug代碼語言

2017-10-10 15:14:23

BUGiOS 11蘋果

2019-01-25 16:03:22

微信騰訊發送

2022-10-17 00:04:30

索引SQL訂單

2014-12-17 09:40:22

dockerLinuxPaaS

2024-11-11 14:57:56

JWTSession微服務

2021-12-09 11:31:16

跨域后端開發

2024-04-22 00:00:01

Redis集群

2024-11-08 15:09:59

2022-05-31 08:35:05

RocketMQACK客戶端

2019-08-01 12:59:21

Bug代碼程序

2015-08-24 10:07:13

程序員bug

2022-06-15 08:14:40

Go線程遞歸

2023-03-13 08:09:03

Protobuffeature分割
點贊
收藏

51CTO技術棧公眾號

手机在线观看av| 国产成人免费观看| 欧美老熟妇乱大交xxxxx| a'aaa级片在线观看| 国产在线精品一区在线观看麻豆| 日韩一区二区欧美| 日韩动漫在线观看| 国产裸体美女永久免费无遮挡| 国内激情视频在线观看| 99久久国产免费看| 青青草原一区二区| 成人做爰69片免网站| 日韩一区二区三免费高清在线观看| 免费精品视频在线| 91麻豆精品国产| 欧洲金发美女大战黑人| 日韩在线观看视频一区二区三区| 国产三区视频在线观看| 草莓视频一区二区三区| 国产三级久久久| 国产精品女人久久久久久| 日本肉体xxxx裸体xxx免费| 日本黄色片在线观看| 国产不卡在线播放| 69av在线视频| 天堂8在线天堂资源bt| 亚洲精品久久久久久久久久| 四季av一区二区三区免费观看| 五月综合激情网| 蜜桃传媒视频麻豆第一区免费观看| 在线精品免费视| 91精品99| 欧美最新大片在线看| 中文字幕一区二区三区有限公司| 刘亦菲久久免费一区二区| 日韩av在线播放中文字幕| 亚洲精品久久久久久下一站| 99视频在线视频| 免费在线中文字幕| 国产精品久久久久久久久免费桃花 | 欧美日韩视频在线第一区 | 国产suv精品一区二区三区| 26uuu另类亚洲欧美日本一| а 天堂 在线| 国产免费不卡| 本田岬高潮一区二区三区| 亚洲第一男人天堂| 亚洲免费黄色网| 色噜噜一区二区三区| 亚洲国产一区二区三区a毛片| 欧美一区二区视频观看视频| 国产97在线 | 亚洲| av免费观看在线| 日本中文一区二区三区| 91国产美女在线观看| 国产成人综合在线视频| 国产影视一区| 精品亚洲国产视频| 9.1在线观看免费| 日本午夜免费一区二区| 一本大道av伊人久久综合| 91传媒视频免费| 中文字幕久久网| 久久大逼视频| 欧美wwwxxxx| 久久噜噜色综合一区二区| av中文一区| 日韩精品免费在线视频观看| 亚洲 欧美 日韩在线| 亚洲小说区图片区都市| 成人午夜碰碰视频| 亚洲影影院av| 99久久国产免费| 韩国女主播成人在线观看| 久久久成人精品视频| 中文字幕av一区二区三区人妻少妇| 国产一区二区三区影视| 色婷婷综合久色| 北条麻妃视频在线| 欧美91看片特黄aaaa| 丰满岳妇乱一区二区三区| 久久久久久草| 亚洲一级av毛片| 久久国产福利国产秒拍| 国产精品网站视频| 亚洲天堂手机版| 久久99精品久久久久久国产越南| 91精品国产自产在线| 欧美日韩精品在线观看视频 | 亚洲毛片一区二区| 日本xxx在线播放| 宅男在线一区| 中文字幕亚洲无线码在线一区| 人妻换人妻仑乱| 国产精品乱战久久久| 亚洲国产精品va在看黑人| 朝桐光av一区二区三区| 欧美日韩夜夜| 欧美无砖专区一中文字| 日韩手机在线观看视频| 成人日韩av| 欧美日韩高清影院| 国产精品丝袜久久久久久消防器材 | 久久精品国产99久久6| 91精品国产综合久久香蕉的用户体验 | 狠狠干视频网站| 国产乱淫av免费| 国产亚洲精品v| 国产99久久精品一区二区 夜夜躁日日躁| 日韩一级片在线免费观看| 欧美亚洲国产精品久久| 久久网福利资源网站| 精品无码人妻一区二区三| 亚洲一区黄色| 国产日韩欧美91| 色综合视频在线| 国产三级欧美三级日产三级99| 亚洲一区二区精品在线观看| 国产网红在线观看| 亚洲成人av一区二区三区| 韩国日本美国免费毛片| 日韩精品一区国产| 亚洲色图校园春色| 国产大片免费看| 老鸭窝91久久精品色噜噜导演| 成人网中文字幕| 精品欧美一区二区三区免费观看 | 我要色综合中文字幕| 国产视频亚洲精品| 亚洲一级生活片| 久久www成人_看片免费不卡| 2019国产精品视频| 户外极限露出调教在线视频| 亚洲免费观看高清完整版在线观看 | gogo高清在线播放免费| 欧美三级日韩在线| 国产真实乱人偷精品| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 免费福利视频网站| 欧美国产91| 国产精品午夜国产小视频| 91亚洲精品在线观看| 老牛影视av牛牛影视av| 亚洲精品高清在线| 亚洲成人福利在线| 欧美码中文字幕在线| 5252色成人免费视频| 天天综合在线视频| 亚洲成av人片一区二区三区| 亚洲天堂av网站| 激情综合亚洲| 国产综合动作在线观看| a级片在线免费观看| 精品久久五月天| 精品小视频在线观看| 国产91精品露脸国语对白| 无码人妻精品一区二区蜜桃百度| 欧美专区视频| 欧美极品欧美精品欧美视频 | 天堂а√在线中文在线新版| 激情成人亚洲| 国产精品传媒毛片三区| 91破解版在线观看| 日韩成人免费视频| 日韩欧美中文字幕一区二区| 91在线视频观看| 无码精品国产一区二区三区免费| 国产精品片aa在线观看| 国产狼人综合免费视频| 成人免费看片| 精品少妇一区二区| wwwxxx亚洲| 久久青草国产手机看片福利盒子| 欧美一级黄色片视频| 欧美一区二区麻豆红桃视频| 国产在线久久久| 国产精品186在线观看在线播放| 亚洲国产精品视频在线观看| 无码人妻黑人中文字幕| 国产精品国产精品国产专区不片| 深爱五月综合网| 免费不卡中文字幕在线| 国产精品高清网站| 免费大片黄在线| 狠狠做深爱婷婷久久综合一区| 中日韩精品一区二区三区| 欧美aaa在线| 成年丰满熟妇午夜免费视频| 欧美综合自拍| 成人xxxx视频| 91高清视频在线观看| 伊人av综合网| 亚洲精品久久久久久无码色欲四季 | 久章草在线视频| 久久久精品久久久久久96| 国产精品久久久久久久小唯西川| 欧美香蕉视频| 免费97视频在线精品国自产拍| 欧美zzoo| 日韩欧美国产一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产在线精彩视频| 日韩最新中文字幕电影免费看| 国产综合视频在线| 欧美性感一区二区三区| 久久久久香蕉视频| 中文字幕不卡的av| 亚洲午夜久久久久久久久| 日产国产高清一区二区三区| 日本福利视频一区| 日韩在线综合| 国产精品都在这里| 怡红院在线观看| 一区二区三区高清国产| 日本激情一区二区| 91精品国产一区二区三区蜜臀 | 另类亚洲自拍| www.日本三级| 久久久久久久久99精品大| 欧美国产综合视频| 国产91精品入| 97人人香蕉| 欧美va在线| 2019中文字幕免费视频| 性欧美1819sex性高清大胸| 国产午夜精品视频免费不卡69堂| 国产91免费看| 日韩欧美中文字幕一区| 亚洲天堂网视频| 91成人国产精品| 在线观看国产亚洲| 午夜久久久影院| 免费视频一二三区| 亚洲人成网站影音先锋播放| 欧美日韩国产黄色| 中文字幕乱码亚洲精品一区| wwwwww日本| 久久久五月婷婷| 亚洲av无码一区二区二三区| 99视频精品全部免费在线| 人妻少妇偷人精品久久久任期| 久久99久久精品| 亚洲xxxx2d动漫1| 日本不卡中文字幕| 亚洲黄色a v| 秋霞电影网一区二区| 可以免费在线看黄的网站| 免费永久网站黄欧美| 成人毛片视频网站| 亚洲一区自拍| 久久久久久久久久久久久国产精品| 亚洲人成在线影院| 国产97在线 | 亚洲| 亚洲制服少妇| 中文字幕第21页| 久热成人在线视频| 午夜免费一级片| 国产酒店精品激情| 成人一区二区三区仙踪林| 懂色av一区二区在线播放| 久久精品aⅴ无码中文字字幕重口| 国产91在线观看丝袜| 无码人妻一区二区三区在线| av中文一区二区三区| 97人妻精品一区二区三区免 | 亚洲综合视频网站| 亚洲免费在线电影| 日韩少妇裸体做爰视频| 欧美日韩在线视频首页| 成人毛片一区二区三区| 亚洲欧洲一区二区三区| 日韩精品一区二区三区在线视频| 亚洲色图在线视频| 久青草免费视频| 黑人欧美xxxx| 中文字幕无码乱码人妻日韩精品| 欧美日韩三级一区| 性欧美18一19性猛交| 亚洲精品720p| av在线免费观看网| 欧美日韩国产成人高清视频| av日韩中文| 国产精品亚洲一区二区三区| 亚洲成av人片在线观看www| 久久久久久九九| 国产精品伦理久久久久久| 国产911在线观看| 国产毛片久久| 亚洲五月激情网| 2022国产精品视频| 久草福利资源在线| 黑人精品xxx一区一二区| 最近中文字幕av| 日韩一卡二卡三卡国产欧美| 四虎精品成人免费网站| 日韩资源在线观看| 日韩脚交footjobhdboots| 国产免费一区二区三区在线观看 | 成人影院大全| 91美女片黄在线观| 亚洲丝袜啪啪| 国产在线视频综合| 美国欧美日韩国产在线播放| 国产清纯白嫩初高中在线观看性色| 久久久精品免费网站| 亚洲综合视频网站| 在线免费观看视频一区| 亚洲精品国偷拍自产在线观看蜜桃| 亚洲视频在线观看免费| 日本在线视频www鲁啊鲁| 国产精品久久久av久久久| 91麻豆精品激情在线观看最新| 亚洲精品在线免费看| 伊人久久大香线蕉| 黑人巨大国产9丨视频| 久久蜜桃资源一区二区老牛| 欧美日韩黄色一级片| 久久精品二区亚洲w码| 人妖粗暴刺激videos呻吟| 国产精品国产精品国产专区不片 | 欧美福利视频导航| 黄色av免费在线观看| 91精品国产九九九久久久亚洲| 高清国产一区二区三区四区五区| 日韩在线第一区| 一本久道久久久| 久久久久亚洲av片无码v| 国产日韩欧美高清在线| 中文字幕精品三级久久久| 欧美大片在线观看一区二区| 性开放的欧美大片| 国产成人福利视频| 欧美a一欧美| 男人天堂av片| 国产成人av在线影院| 欧美日韩中文字幕在线观看| 欧美久久久久久蜜桃| h视频在线免费| 国产精品久久久久久av| 蜜桃一区二区三区| 黄色片一级视频| 久久日一线二线三线suv| 亚洲欧美综合自拍| 国产视频在线一区二区| 麻豆国产在线| 蜜桃狠狠色伊人亚洲综合网站| 国产欧美高清| 亚洲欧美视频在线播放| 疯狂欧美牲乱大交777| 日韩av视屏| 国产91色在线| 黄色av中文字幕| 一区二区三区在线免费观看| 国产精品人妻一区二区三区| 日韩最新免费不卡| 亚洲黄色片视频| 91久久奴性调教| 成年人视频免费在线观看| 国产精品久久久久久久久久小说| 欧美日韩国产一区二区三区不卡| 成人一区二区三| 国产精品少妇自拍| 国产精品免费无遮挡| 久久综合88中文色鬼| 亚洲精品一区国产| 草草视频在线免费观看| 99精品一区二区| 国产高潮久久久| 日韩成人精品视频| 国产调教打屁股xxxx网站| 夜夜揉揉日日人人青青一国产精品 | 成人18在线| 亚洲va欧美va国产综合剧情| 欧美日韩精选| xxxx黄色片| 欧美日韩久久久| 18av在线视频| 国产在线一区二区三区四区| 天堂一区二区在线| 亚洲色偷偷综合亚洲av伊人| 精品成人佐山爱一区二区| 伊人久久综合一区二区| 香蕉久久夜色| 成人午夜精品在线| 日本熟女毛茸茸| 久久精品国产96久久久香蕉| 成人三级av在线| 国产无套粉嫩白浆内谢的出处| 中文字幕在线一区二区三区| 亚洲精品.www| 国产精品第七影院| 国模 一区 二区 三区| 37p粉嫩大胆色噜噜噜| 欧美福利视频导航| 一根才成人网| 欧美a级免费视频| 国产亚洲欧美在线| 精品人妻一区二区三区麻豆91 | 一本一道人人妻人人妻αv| 色综合久综合久久综合久鬼88|