如何debug乙個問題的方法經驗之談

2021-07-10 05:13:16 字數 1713 閱讀 5903

眾所周知,對於軟體行業,只要是開發工作,永遠都避免不了有bug的存在,有bug並不可怕,就怕你在**的海洋中毫無方向的摸索,那簡直就是噩夢!而我在帶團隊的過程中,常常發現屬下經常面對稍微困難一點的bug時都無所適從,不知道從**下手,有的時候,問題居然就是出在少了乙個括號,符號,逗號等等,而找我debug的時候卻已經struggle了大半天了,非常傷腦筋,並且這種bug往往還不容易被發現。每次這個時候都會來找我,基本上無論多麼複雜的bug,到我這裡都能快速得到解決,枯木逢春!這並不是我運氣好,而是在長達15年的軟體開發經驗過程中,我早已摸索了一套debug問題的方**,只要按照這個步驟來,基本上就能快速定位問題具體出現在**的哪一行,讓bug原形畢露!因此,在遇到bug的時候,基本上能從容不迫。

我意識到,團隊成員幾乎沒有一套方法來解決bug,而是完全憑著感覺在debug,這樣運氣的成分就非常大,不能從容不迫的解決問題,因此每次遇到bug的時候都心裡沒底,並且找到我的時候往往已經浪費了大量時間,在專案進度很緊的情況下,這是很揪心的一件事。所以,我專門針對整個團隊做了一次如何debug問題的技術培訓,經驗證,下屬後來很少再來「打擾」我了。

必要前提:

1. 你必須對你的**工作/業務流程很熟悉,這個很容易理解,否則就成為無源之本。

2. bug必須能夠重現,否則只能靠猜。所以在debug之前,必須確認這個bug能夠通過某個步驟,每次都能夠exactly發生。

好了,有了以上2個前提,下面在說說如何一步步debug:

1. 根據場景,你一定知道在**都經過了哪些主分支。那麼首先在大概出現問題上下游的主分支入口處(第一行**處)加上log。

2. 重現bug,看log在哪2句之間出現了bug。

3. 在這2個log之間的分支處新增log,繼續重現bug,周而復始,很快就能夠把bug出現的地方夾逼到某一行。

4. 這個時候可以通過設定斷點,重run**,然後在此行附近觀察變數的值是否符合預期,一般來說,會迅速找到問題所在,比如某個變數的值不對。這個時候乙個線索就找到了,然後就可以逆流而上,看為什麼不對,這個可以看這個值是什麼時候賦值的,為什麼賦值不對,一步步逼近原因的真相。

5. 找出root cause,fix bug,然後一定再重新run一次,測試bug是否已經fix!

基本上,根據步驟1-5都能夠解決90%的bug。但是世事無絕對,凡事都有例外,就像真假美猴王裡的六耳獼猴,在無界之外。比如oom記憶體洩露,閃退等問題,是不能用常規手段來發現問題的,只能通過統計學的方法,和經驗來發現,比如mat分析,systrace, timetrace等專業分析工具。當然前提也是必須能夠不斷重現,然後

找出root cause,fix bug,測試!

如果還是不能解決的話,這個時候就要用到工作中的soft skill了:

1. 上網搜尋找類似問題,反編譯模仿等。

2. 尋求其他人的幫助

3. 最後一步,舉旗,不要把球抱在自己懷中

這樣,通過不斷的escalate,把問題充分暴露出來,而不至於乙個bug讓你停滯不前,耗費大量的時間。

當然以上方法和你自身的技術水平是相關的,水平高的能夠快速定位,而水平一般的可能會用更多的時間。但是,總而言之,它能夠讓你固定的套路,以不變應萬變,一步步逼近事情的真相!再多說一句,任何技術上的問題,都應該以量化的辦法來解決,千萬不要憑感覺,猜,靠經驗等等。只有用資料說話,才是最科學的解決辦法。因為,我發現有些5年以上工作經驗的開發者,依然會靠一些經驗來解決問題,但是問他怎麼解決的時候拿不出資料,只能說憑感覺,經驗,這些都是不專業的態度和精神。

希望對大家有用。

乙個hdmi音訊問題的debug

問題描述 開啟logcat可了看 沒次卡時都會列印像下面的log w audio hw primary 2194 do out standby.1074415168 i omxplayer 2194 stop player.w audio hw primary 2194 card 0,port 0 ...

最近用到的乙個Debug類

這個是我最近寫的乙個記錄除錯資訊的類,基本功能和以前寫過的udptracelistener類似 通過udp資料報文傳送除錯資訊傳送出去。為了方便除錯,增加了顏色和一些簡單的指令功能。感覺還比較方便,這裡記錄一下,以備後續使用。staticclassdebug publicstaticvoidwrit...

乙個前端反debug工具

概要 此工具通過不斷重定向至特定源 位置能夠讓瀏覽器debugger處於暫停狀態,對非授權除錯者在debug時造成干擾,在一定程度上保護前端 存在的解決方法 deactivate breakpoints 存在的反解決方法 在模板 中與業務邏輯耦合 模板 可直接使用 function construc...