請問大家一下,當大家遇到程式碼雙向Bug時,兩者都可行,然後陷入無窮迴圈當中,能否用白話文來解釋一下如何排除錯誤呢?
是把所有程式碼都從頭跑一次還是檢視一次呢?
如何抓出問題點以及解決問題辦法,我遇到了非電腦的事情,但覺得這種排除錯誤的方式,或許大家分享可以讓我走出這Bug迴圈當中,如果有執行範例,那真的感激不盡,但是著重在各位的思考邏輯,謝謝大家分享
我個人是將您這類問題定義為:不可重現的偶發性問題("偶發"跟原PO"雙向"無關,單純就字面上意思:偶爾就會發生)
偶發性問題:如果可以重現Bug,例如:您知道作了A,一定會出現結果Z,那就直接在A上面找原因,是硬體就換掉,是軟體就重構或重寫。
不可重現的偶發性問題:基本上就只能用窮舉排除法來找問題(或是說當藉口拖時間),以硬體來說就是電腦會當機,先換RAM看看,問題還有就換Power/主板/CPU/換風扇/重灌OS,就一樣一樣的更換+觀察,處理到沒問題為止,我碰過最扯的個案是換機殼....
我維修的經驗上,也的確碰過換機殼問題才消失。
當下也覺得很扯。
但也不知道原因是什麼。
POWER鎖孔、主機板鎖柱、排線、信號排線....
所有的問題都查過了。也試過換新的板子。將裏面的東西全換新的。
就是問題還是一樣存在。
但只要放到另一個機殼就沒問題了。百思不得其解。
就連廠商也覺得莫名奇妙。
我試過用排除法去想這bug真正的問題在哪,可是換機殼就像機台上擺乖乖一樣啊!(你是安慰我吧?)
那能否請教一個問題,先前大家在寫程式時,我知道程式碼在乎的是邏輯,有沒有一次就搞定的時候,沒有所謂的bug,而bug歸根究柢發生的原因是硬體和軟體都會發生的嗎?
原本是有想細寫關於軟體的bug的,但是相較硬體太複雜了,想偷個懶卻被原PO Rebacce姐抓現行....
軟體的bug整體流程的邏輯錯誤應該比較少見,不然程式應該上不了線,會發生通常是在某些細部分支的判斷,可能是程式設計師打錯字/腦抽...等狀況而產生,或是沒仔細作邊際條件(極大值/極小值)的測試。
軟體發生不可重現的偶發性問題,若用排除法一支支的程式重構/重寫工程太浩大且風險太高,原本只是偶發小問題,最後變成每天發生,那可就被釘在恥辱牆上了。我個人的建議是在舊有的程式上加上詳細的Log記錄,Log記錄需包含但不限於:時間/程式名稱/使用者/作業狀態/變數值/例外....至少下次使用者反映他發生狀況時,您可以去看Log回推錯誤發生的狀態,可以試著在測試環境重現問題,進而解決問題。