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