當前位置:
首頁 > 知識 > 常用BUG解決方法

常用BUG解決方法

扯淡

隨著工作時間越來越長,對於代碼的理解也越來越多!關注重點也漸漸地從代碼本身轉移到了代碼結構性、解決問題方法性等方面。下面就來說一說,在遇到代碼BUG,我們常用的一些方法!


二分定位法

通常來說,無論BUG因此多深,通過二分定位法基本可以確定問題所在!那麼什麼是二分定位法?就是在程序關鍵點(可能的出錯點)進行分割,看看還會不會出問題,類似二分查找的方法,逐步縮小問題範圍。

二分定位法適用於絕大所數問題環境。對二分定位法作進一步擴展延伸,就會得出我們常用一些BUG解決方法:

  • 注釋大法:

    將代碼一點點注釋,來縮小範圍
  • Printf大法:

    在合適的代碼位置對特定的變數等進行輸出
  • 日誌大法:

    在代碼合適位置記錄相關變數等關鍵數據

或許你還有其他名稱的方法,但是基本都屬於二分定位法的範疇!

IDE調試法

此法在程序開發階段是絕對的利器!通過加斷點、單步調試等可以快速的發現問題所在。突然想到了宇宙第一IDE:Visual Studio。但是,該方法有個比較大的限制:對於非邏輯性錯誤(比如內存泄露)來說,IDE調試法就有些乏力了。因為單純的調試,可能BUG並不會出現。而且一旦出現該種問題,可能會直接導致IDE調試不可用。

其實,IDE調試,不僅僅是找BUG解決問題,對於分析代碼邏輯來說無二選擇。對於某些設計邏輯的實現,是否符合當初的設計。僅僅通過最終結果不能證明正確,還是需要通過IDE來驗證!殊不知,在破解、逆向領域,調試絕對的NB,誰會有心情悶頭看那一堆彙編代碼,直接上調試器分析多好。


小黃鴨調試法(Rubber duck debugging)

又稱橡皮鴨調試法,黃鴨除蟲法。就是通過向不懂程序的人(只要是不了解要解釋的代碼的任何一個人都可以,比將你寫的代碼解釋給你的同事)詳細解釋代碼,從中發現問題或者獲取靈感! 此概念是參照於一個來自《程序員修鍊之道》書中的一個故事。傳說中程序大師隨身攜帶一隻小黃鴨,在調試代碼的時候會在桌上放上這隻小黃鴨,然後詳細地向鴨子解釋每行代碼。

許多程序員都有過向別人(甚至可能向完全不會編程的人)提問及解釋編程問題,就在解釋的過程中擊中了問題的解決方案。一邊闡述代碼的意圖一邊觀察它實際上的意圖並做調試,這兩者之間的任何不協調會變得很明顯,並且更容易發現自己的錯誤。如果沒有玩具小鴨子也可以考慮向其它東西傾訴,比如桌上的花花草草,鍵盤滑鼠。

類似的,有一種現象叫做ConeofAnswers,這是一個常見的現象。你的朋友跑來問你一個問題,但是當他自己把問題說完,或者說到一半的時候就想出了答案走了,留下一臉茫然的你。是的,這個時候你就起到了那隻小黃鴨的作用。

相似的概念還有不少,列如自白調試、紙板程序員或程序員的假人、想出腦外等等。總的來說,在你試圖表述自己的想法的過程中,自然地在促使自己去整理思路,重新考慮問題。

這種方法流傳開後,很多程序員效仿,開始拿其他玩具,比如手辦、喜歡二次元的、還會拿初音或者是其他公仔呀。


重讀法

這種方法比較簡單直接,就是通過一遍遍地閱讀代碼來發現問題。


重構法

終極必殺器。如果最終無論如何也不能找到BUG的問題所在,那就直接重構吧!重構有個問題需要注意,就是重構時不要再參看之前的代碼!重構必須要考慮結構性的設計問題!

當然,對於簡單的代碼(對整體代碼結構影響不大),直接重寫會更迅速!

總結

常用的BUG查找方法基本就是以上這幾種,可能你還有不同的叫法或者其他方法。在實際問題解決中,可能需要多種方法結合使用。

優先解決可重現的bug,有些bug不是很明顯,那麼就想辦法增加他的破壞性,把現象放大,這在我們的系統壓力測試時會經常遇到一種方法。有時候我們甚至需要問自己,如果我要實現bug描述的現象我要怎麼寫代碼才行?

最後放幾個奇葩注釋!

// _ooOoo_
// o8888888o
// 88" . "88
// (| -_- |)
// O = /O
// ____/`---"\____
// . " \| |// `.
// / \||| : |||//
// / _||||| -:- |||||-
// | | \ - /// | |
// | \_| ""---/"" | |
// .-\__ `-` ___/-. /
// ___`. ." /--.-- `. . __
// ."" "< `.___\_<|>_/___." >""".
// | | : `- `.;` _ /`;.`/ - ` : | |
// `-. \_ __ /__ _/ .-` / /
// ======`-.____`-.___\_____/___.-`____.-"======
// `=---="
//
// .............................................
// 佛祖鎮樓 BUG辟易
// 佛曰:
// 寫字樓里寫字間,寫字間里程序員;
// 程序人員寫程序,又拿程序換酒錢。
// 酒醒只在網上坐,酒醉還來網下眠;
// 酒醉酒醒日復日,網上網下年復年。
// 但願老死電腦間,不願鞠躬老闆前;
// 賓士寶馬貴者趣,公交自行程序員。
// 別人笑我忒瘋癲,我笑自己命太賤;
// 不見滿街漂亮妹,哪個歸得程序員?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//_ooOoo_
//o8888888o
//88" . "88
//(| -_- |)
// O = /O
//___/`---"\____
//. " \| |// `.
/// \||| : |||//
/// _||||| -:- |||||-
//| | \ - /// | |
//| \_| ""---/"" | |
// .-\__ `-` ___/-. /
//___`. ." /--.-- `. . __
//."" "< `.___\_<|>_/___." >""".
//| | : `- `.;` _ /`;.`/ - ` : | |
// `-. \_ __ /__ _/ .-` / /
//======`-.____`-.___\_____/___.-`____.-"======
//`=---="
//
// .............................................
// 佛曰:bug泛濫,我已癱瘓!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
*
* ┌─┐ ┌─┐
* ┌──┘ ┴───────┘ ┴──┐
* │ │
* │ ─── │
* │ ─┬┘ └┬─ │
* │ │
* │ ─┴─ │
* │ │
* └───┐ ┌───┘
* │ │
* │ │
* │ │
* │ └──────────────┐
* │ │
* │ ├─┐
* │ ┌─┘
* │ │
* └─┐ ┐ ┌───────┬──┐ ┌──┘
* │ ─┤ ─┤ │ ─┤ ─┤
* └──┴──┘ └──┴──┘
* 神獸保佑
* 代碼無BUG!
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
*
* __ (__`
* (__` \`
* `\` \
* `\` \
* `\`#\ #
* \_ ##\_ |##
* (___)(___)##
* (0) (0)`##
* |~ ~ , ##
* | | ##
* | / ## __..---"""""-.._.._
* | | `## _.--" _ `.
* Y | `##" `
* / | | `
* /_...___| | `\
* / `. | / ##
* | | | / ####
* | | | / ####
* | () () | | | _.-" ##
* `. ." `._. |______..| |-"|
* `------" | | | | | || |
* | | | | | || |
* | | | | | || |
* | | | | | || | Joan Stark
* _____ | | | |____| || |
* jgs / `` |-`/ ` |` |
* \________\__\_______\__
* """"""""" """""""""""
*
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
.::::.
.::::::::.
::::::::::: FUCK YOU
..:::::::::::"
"::::::::::::"
.::::::::::
"::::::::::::::..
..::::::::::::.
``::::::::::::::::
::::``:::::::::" .:::.
::::" ":::::" .::::::::.
.::::" :::: .:::::::"::::.
.:::" ::::: .:::::::::" ":::::.
.::" :::::.:::::::::" ":::::.
.::" ::::::::::::::" ``::::.
...::: ::::::::::::" ``::.
```` ":. ":::::::::" ::::..
".:::::" ":"````..
*/

常用BUG解決方法

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

vue項目中添加element-ui需要注意的地方
「MySQL」之 開發規範

TAG:程序員小新人學習 |