常用 BUG 解决方法
扯淡
??隨著工作時間越來越長,對于代碼的理解也越來越多!關注重點也漸漸地從代碼本身轉移到了代碼結構性、解決問題方法性等方面。下面就來說一說,在遇到代碼BUG,我們常用的一些方法!
二分定位法
??通常來說,無論BUG因此多深,通過二分定位法基本可以確定問題所在!那么什么是二分定位法?就是在程序關鍵點(可能的出錯點)進行分割,看看還會不會出問題,類似二分查找的方法,逐步縮小問題范圍。
??二分定位法適用于絕大所數(shù)問題環(huán)境。對二分定位法作進一步擴展延伸,就會得出我們常用一些BUG解決方法:
- 注釋大法: 將代碼一點點注釋,來縮小范圍
- Printf大法: 在合適的代碼位置對特定的變量等進行輸出
- 日志大法: 在代碼合適位置記錄相關變量等關鍵數(shù)據(jù)
或許你還有其他名稱的方法,但是基本都屬于二分定位法的范疇!
IDE調試法
??此法在程序開發(fā)階段是絕對的利器!通過加斷點、單步調試等可以快速的發(fā)現(xiàn)問題所在。突然想到了宇宙第一 IDE:Visual Studio。但是,該方法有個比較大的限制:對于非邏輯性錯誤(比如內存泄露)來說,IDE調試法就有些乏力了。因為單純的調試,可能BUG并不會出現(xiàn)。而且一旦出現(xiàn)該種問題,可能會直接導致 IDE 調試不可用。
??其實,IDE 調試,不僅僅是找 BUG 解決問題,對于分析代碼邏輯來說無二選擇。對于某些設計邏輯的實現(xiàn),是否符合當初的設計。僅僅通過最終結果不能證明正確,還是需要通過IDE來驗證!殊不知,在破解、逆向領域,調試絕對的 NB,誰會有心情悶頭看那一堆匯編代碼,直接上調試器分析多好。
小黃鴨調試法(Rubber duck debugging)
??又稱橡皮鴨調試法,黃鴨除蟲法。就是通過向不懂程序的人(只要是不了解要解釋的代碼的任何一個人都可以,比將你寫的代碼解釋給你的同事)詳細解釋代碼,從中發(fā)現(xiàn)問題或者獲取靈感! 此概念是參照于一個來自《程序員修煉之道》書中的一個故事。傳說中程序大師隨身攜帶一只小黃鴨,在調試代碼的時候會在桌上放上這只小黃鴨,然后詳細地向鴨子解釋每行代碼。
??許多程序員都有過向別人(甚至可能向完全不會編程的人)提問及解釋編程問題,就在解釋的過程中擊中了問題的解決方案。一邊闡述代碼的意圖一邊觀察它實際上的意圖并做調試,這兩者之間的任何不協(xié)調會變得很明顯,并且更容易發(fā)現(xiàn)自己的錯誤。如果沒有玩具小鴨子也可以考慮向其它東西傾訴,比如桌上的花花草草,鍵盤鼠標。
??類似的,有一種現(xiàn)象叫做ConeofAnswers,這是一個常見的現(xiàn)象。你的朋友跑來問你一個問題,但是當他自己把問題說完,或者說到一半的時候就想出了答案走了,留下一臉茫然的你。是的,這個時候你就起到了那只小黃鴨的作用。
??相似的概念還有不少,列如自白調試、紙板程序員或程序員的假人、想出腦外等等。總的來說,在你試圖表述自己的想法的過程中,自然地在促使自己去整理思路,重新考慮問題。
??這種方法流傳開后,很多程序員效仿,開始拿其他玩具,比如手辦、喜歡二次元的、還會拿初音或者是其他公仔呀。
重讀法
??這種方法比較簡單直接,就是通過一遍遍地閱讀代碼來發(fā)現(xiàn)問題。
重構法
??終極必殺器。如果最終無論如何也不能找到BUG的問題所在,那就直接重構吧!重構有個問題需要注意,就是重構時不要再參看之前的代碼!重構必須要考慮結構性的設計問題!
??當然,對于簡單的代碼(對整體代碼結構影響不大),直接重寫會更迅速!
總結
??常用的BUG查找方法基本就是以上這幾種,可能你還有不同的叫法或者其他方法。在實際問題解決中,可能需要多種方法結合使用。
??優(yōu)先解決可重現(xiàn)的bug,有些bug不是很明顯,那么就想辦法增加他的破壞性,把現(xiàn)象放大,這在我們的系統(tǒng)壓力測試時會經常遇到一種方法。有時候我們甚至需要問自己,如果我要實現(xiàn)bug描述的現(xiàn)象我要怎么寫代碼才行?
最后放幾個奇葩注釋!
總結
以上是生活随笔為你收集整理的常用 BUG 解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SourceInsight 4.0 之二
- 下一篇: LwIP 之六 详解动态内存管理 内存池