從一次使用自動(dòng)售貨機(jī)的經(jīng)歷淺談代碼調(diào)試。

? ? ? 事情是這樣的,我先是拿了一張皺皺巴巴的十塊錢投進(jìn)去,我們可以把這理解成輸入數(shù)據(jù)。然后它怎么也不收啊,這就說明我的數(shù)據(jù)不是它需要的類型,為什么呢?因?yàn)榘櫚桶?。這里我做了一個(gè)錯(cuò)誤的決定,我選擇重復(fù)多次輸入,試圖蒙混過關(guān),讓程序誤以為我輸入的是正確的數(shù)據(jù),而這也就產(chǎn)生了我要說的bug。不過在講這個(gè)bug之前呢,我想先贊揚(yáng)一下這個(gè)自動(dòng)售貨機(jī)的超時(shí)設(shè)定,它可以在60秒沒有正確輸入的情況下強(qiáng)行退出,這就可以避免很多死循環(huán)之類的問題。好,繼續(xù)說這個(gè)bug,這個(gè)bug就是我的十塊錢投進(jìn)去了,但是并沒有被處理程序檢測(cè)到,也就是說,我的錢被吞了,同時(shí),程序因?yàn)楫惓M顺隽恕S龅絙ug怎么辦呢?不要慌,先想辦法重現(xiàn)這個(gè)bug,或者說重新輸入新的數(shù)據(jù),比較兩次輸入的不同以及不同輸入導(dǎo)致的不同輸出結(jié)果,分析問題原因。于是我回宿舍又拿了一張嶄新的五塊錢,這次還沒有輸入,剛點(diǎn)擊現(xiàn)金支付,或者說剛調(diào)用現(xiàn)金支付這個(gè)接口,程序就顯示異常退出了。這就很奇怪了是吧?為什么呢?我馬上想到,應(yīng)該是我之前那個(gè)十塊錢并不是沒有得到正確處理,而是根本沒有成功輸入。那么他就在....沒錯(cuò)!他就在投幣口卡著,只不過藏的比較好。于是我把他拽出來了。重新輸入新的數(shù)據(jù):嶄新的五塊,ok!我買到水啦!
? ? ? 寫著玩的23333大家看個(gè)樂就好。