bug 排查能力突飛猛進(jìn),我的一點(diǎn)小感悟
大家好,我是帥地。
最近在星球里有球友問了我一個(gè)關(guān)于提高自己查找 bug 能力的問題。

關(guān)于如何提升查找 bug 能力的問題,其實(shí)帥地也沒有去總結(jié)出明確的方法論,但學(xué)了五年的編程,倒是有點(diǎn)小感悟。
我記得我剛開始學(xué) C 語言的時(shí)候,明明是跟著書上的代碼寫的,但還是得不到預(yù)期結(jié)果,幾十行的代碼,我居然找不出 bug 在哪里,通過大半小時(shí)的排查,我發(fā)現(xiàn)是 if(條件) 那里多了一個(gè)分號(hào),例如
if(條件);
{
doSomething();
}
后來也是在一個(gè)很簡(jiǎn)單的代碼里,特么我也是不知道啥錯(cuò)誤,莫名其妙,也是搞了好久,最后才發(fā)現(xiàn)是在 for 循環(huán)里把「分號(hào)」寫成了「逗號(hào)」。
不得不說,這些簡(jiǎn)單的錯(cuò)誤,有時(shí)候賊難排查,因?yàn)檫@些錯(cuò)誤不會(huì)報(bào)錯(cuò),程序可以正常運(yùn)行,當(dāng)然,有時(shí)候也會(huì)遇到很多程序在運(yùn)行中莫名結(jié)束的,例如學(xué)到指針那里就遇到運(yùn)行中報(bào)錯(cuò)但控制臺(tái)沒有提示的 bug。
總之,剛開始學(xué)編程那會(huì),有很多莫名的 bug,并且每次都排查好久,不過后來我基本都知道套路了,可能是熟悉了,每次有 bug,可以很快反應(yīng)出來大致是哪些出問題,每次有人問我這代碼哪里有 bug,我都可以很快找出來。
之所以能夠快速找出,并不是我有多聰明,而且我經(jīng)歷過,查的多,有經(jīng)驗(yàn)了。
后來,我做了 JavaWeb 這些項(xiàng)目,跟著視頻做的,也總是遇到錯(cuò)誤,而且不想以前幾十上百行代碼,這些項(xiàng)目上千行代碼,而且各種依賴包,我記得我剛開始做的一個(gè) SSM 項(xiàng)目,從 GitHub 拉下來的,師兄讓我用 IDEA 去運(yùn)行起來。
我很害怕,因?yàn)槲覍?duì) ssm 項(xiàng)目不熟悉,這要怎么運(yùn)行起來?沒辦法,我跟著文檔弄,結(jié)果可想而知,我遇到了很多錯(cuò)誤,特么我對(duì) IDEA 也不熟悉啊,記得當(dāng)時(shí)有一個(gè) bug 我排查了三天三夜,那三天都沒有睡好,就是 maven 打包的時(shí)候總是出現(xiàn)錯(cuò)誤,當(dāng)時(shí)我對(duì) maven 也很不熟悉。
這個(gè)時(shí)候的錯(cuò)誤,不像當(dāng)時(shí)學(xué)習(xí) C 語言那樣,看代碼邏輯就能找出來,而是涉及很多模塊,很多依賴,這些依賴包的水又很深,基本不是說看看代碼就能看出來的。
在對(duì)這些技術(shù)都不熟悉的情況下,我花了好幾天,百度了好幾天,終于把項(xiàng)目運(yùn)行起來了,莫名激動(dòng),盡管花了好幾天。
如果你問我在這個(gè)過程學(xué)到了什么知識(shí),我會(huì)告訴你,我也不知道具體自己學(xué)到了什么知識(shí),但我就是感覺自己查找 bug 的能力提高了很多,反正就是可以神經(jīng)反應(yīng),大致知道從哪里排查,反正日后遇到這種問題莫名自信。
后來我工作了,以前自己做項(xiàng)目,都是在本地運(yùn)行,自己也沒有打印什么日志,或者說日志都是打印到控制臺(tái)的,反正就是很不規(guī)范。
但是在大公司就不一樣了,有相對(duì)完善的日志系統(tǒng),而且有錯(cuò)誤也不會(huì)打印到控制臺(tái)上,因?yàn)槎际窃诜?wù)器上運(yùn)行代碼的,你得去查找對(duì)應(yīng)的日志,有時(shí)候連日志在哪里,都不知道,,,
在以前,依賴包往往是你自己搞的,但在公司,整體架構(gòu)是別人搭建好的了,依賴包也是有版本管理,別人搞好的了,所以遇到 bug,真的得看日志,跟著日志來,之后再去細(xì)查。
剛開始我還挺不習(xí)慣的,加上公司的網(wǎng)絡(luò)環(huán)境莫名其妙,而且對(duì) linux 那些 find,grep 等命令不是很熟悉,,,反正就是查找 bug 相對(duì)較慢。
后來我在公司接手了一個(gè) D 監(jiān)控的東西,是個(gè)老系統(tǒng),問題賊多,經(jīng)常有工單(就是用戶的求助或者投訴啥的),然后我必須根據(jù)這些工單給用戶一個(gè)明確的答復(fù),注意,必須是明確,不能是「應(yīng)該」,「大概」,畢竟客戶是上帝。
那會(huì)一天好幾個(gè)工單,我那段時(shí)間真的炸了,而且經(jīng)常需要上線上的服務(wù)器排查問題,真的是各種莫名的 bug 都有。
bug 排查多了,有種自己身經(jīng)百戰(zhàn)的感覺,一點(diǎn)也不畏懼 bug,一遇到問題,腦子就會(huì)轉(zhuǎn)起來,很快就猜測(cè)出各種可能性,然后排查,記得有次我導(dǎo)師問我:你這個(gè)是怎么想到的(突然有種得意的感覺)。
其實(shí)說了這么多,我是想說,對(duì)于查找 bug,我也沒有明確的方法論,因?yàn)?bug 真的各種莫名其妙,但當(dāng)你發(fā)現(xiàn)時(shí),也確實(shí)并非莫名其妙,往往是因?yàn)樽约翰患?xì)心或者理解不到位導(dǎo)致的。
我覺得我查找 bug 的能力還行,這并不是因?yàn)槲艺莆樟硕嗌俜椒ㄕ摶蛘叨嗦斆鳎俏遗挪槎嗔耍颗挪橐淮危詈笳页?bug 所在,這一次成功的查找經(jīng)歷,就會(huì)成為我的經(jīng)驗(yàn),每次遇到 bug,我就會(huì)去掃描各種可能,或者腦子就直接定位了。
所以我覺得,多多實(shí)踐,是提升查找 bug 能力的一種有效方式。
如果你查找 bug 能力太欠缺,往往是實(shí)踐的不夠多,接下來可以多多腳踏實(shí)地,多查查 bug,可能就莫名起來提升上去了,最后也會(huì)形成屬于你自己的方法論。
最后小破號(hào)求關(guān)注,每一篇文章都很認(rèn)真
