沒有解不了的bug,只有追不到的女神
大家好,我是良許。
我們程序員的成長史就是與bug的斗爭史,每天重復著寫bug、解bug。俗話說:沒有解不了的bug,只有追不到的女神。
不僅菜鳥不斷埋雷,老司機也在創造bug,只是頻率略低。
當然了,即使你是老司機,代碼寫的溜溜的,在團隊作戰時也難免被團隊成員拉下水,在特殊時期被迫上陣測試bug。正所謂,不怕神一樣的對手,就怕豬一樣的隊友。
既然bug是不可避免的,大神的升級之路也少不了它的豐功偉績,那當程序出現bug后,要如何進行調試。且看我十招降龍十八掌解Bug法,比追女神的方法更管用。圖片
首先,調整心態
人人都會出bug,bug是無法避免的,所以千萬不要覺得,我出現了bug,就說明我比較菜(雖然自己確實比較菜)。
雷軍,馬化騰,李彥宏,張小龍,他們都寫過無數的bug,出險bug是一件很正常的事。千萬不要有太重的心理負擔,平常心對待即可。
其次,想辦法復現bug
如果自己復現不了的話,可以找測試人員幫忙。如果bug能夠穩定地復現,那么幾乎可以斷定,這個bug是肯定可以解決的。
最讓人頭疼的是偶然出現沒辦法復現的bug,如何解決這種神奇的bug我們等下再說。
第三,仔細分析現象
對照需求文檔,看看程序正確的運行應該是怎樣的狀況,再對比bug出現的現象,我們一般可以大致定位出來是哪個部分出現了問題,再對那個部分進行深入分析。
第四,查看日志文件
日志文件是非常重要的一個文件,記錄了程序進行過程中輸出的各種結果,同時也記錄各種各樣的報錯信息。所以你分析報錯信息,再結合報錯點上面及下面一些正常的log,一般也可以定位到對應的代碼位置,甚至直接就可以解決bug了。
這就要求我們平時在寫代碼時,一定要多留個心眼,把可能出錯的地方多寫一些log,特別是if...else,try...exception,這類程序異常運行的地方多加一些log。
雖然寫這些log的時候可能會多花點時間,但在代碼出現bug的時候可以給你省下很多調試的時間的。
第五,網絡上查找解決方法
其實很多bug也有其他程序員碰到過,所以如果你實在分析不出原因的話,直接網上搜索解決方案。推薦google,stackoverflow,bing,最后再用百度。
搜索時,建議盡量用英文,這樣搜出來的結果會更多,并且不少會是非常詳細的解答,非常有助于bug的解決。
第六,注釋法
如果你實在沒有思路,那可以采用注釋法來排查。所謂的注釋法,就是你把你寫的類、函數、模塊,等等你認為有可能出現這個bug的部分,一個個依次注釋掉。
每注釋一部分,編譯運行,看看bug有沒復現,有復現的話繼續再注釋其它部分,直到bug不再出現。這樣就可以確定bug出現在剛剛注釋的代碼里,再慢慢把注釋的代碼打開,就慢慢縮小了范圍,然后就能排查出問題了。
這個方法是當年我的一個主管教我的,我覺得非常實用,現在分享給大家。
第七,斷點調試
這應該是很常見的一種調試方法了。你可以在代碼可能出錯的地點打上斷點,然后再運行代碼,看看程序會在哪一行出錯。這種方法簡單實用,效率也非常高。
第八,增加日志
對于一些不方便進行斷點調試的場合,比如說我所從事的Linux應用開發的場合,一般我們寫完程序編譯后就直接丟到Linux平臺上運行,如果要調試的話需要用到gdb,但很不方便。
所以對于我個人來講的話,我幾乎沒用過斷點調試,我用的方法就是在代碼里可能出錯的地方,人為地再增加幾個log,或者把一些對應的變量的值用log打出來。然后通過已有的log及新增的這些log,就可以排查出來問題點了。
這種方法雖然說不是很高效,但用這種方法一般要先分析代碼,再打相應的log,可以鍛煉在大腦里直接運行代碼的能力,久而久之也會提升代碼水平,后面調試的速度也會越來越快。據說,大神都是偏愛這種調試方法。
第九,code review
如果你上面的方法都沒辦法解決bug,或者你的bug根本就沒辦法復現,那么你就可以組織一場code review,讓組內的成員一起來找茬。一個人的力量有限,但一群人加起來就會有無窮的力量了。通過一群人來群毆你的代碼,很可能就會找到這個bug的根因了。
第十,請教老程序員
俗話說,不懂就要問。所以,你如果實在解決不了bug的話,可以去請教組里的老程序員。老程序員一般經驗比較豐富,他們有可能根本不需要調試,一眼就看出你的問題點。所以,平時有事沒事一定要跟老程序員搞好關系,到時候請他們幫忙的時候就好開口了。
但是,千萬不要太依賴老程序員,即使他們幫你解決了問題,你也一定要自己去想一下,他們是怎么解決你的問題的,使用了什么方法什么技巧?只有這樣做,你的技術才會得到提升。
最后,再推薦一個國外很流行但國內很小眾的方法,小黃鴨調試法
所謂的小黃鴨調試法,并不代表小黃鴨會幫你解bug,而是你在調試代碼的時候,手拿一只小黃鴨,然后詳細跟小黃鴨講解你寫代碼的思路,以及每一行代碼的意義。
這樣講著講著,突然就會靈光一現,找到問題點了。這種方法看起來有點傻,有誰會對一個玩偶嗶哩叭啦講代碼,所以我估計這也是小黃鴨調試法在國內流行不起來的原因。
如果你覺得這樣很傻的話,可以拉一個同事過來,向他講解代碼。或者你也可以自言自語,講著講著,你就可能找到解決方法了。
好了,以上就是我給大家推薦的幾種bug解決方法。這些方法都是非常實用的,如果一種方法行不通的話,可以用其它方法來解決,甚至使用多種方法一起來解決問題。