星期四, 1月 22, 2015

Debug的方法

Debug的方法很多,
先講流程:

發現問題->重現問題->找到原因->解決問題


以下假設問題已能被重現,
例出常用的幾種Debug手法:

1. 分段法
把程式分成數個區塊,鎖定在有問題的區塊debug。

2. Trace
從發生問題的code的call stack慢慢trace回去,
就不多做論述。

3. 地毯式搜索
這是最爛的方法,
但只要肯花時間就能獲得一定成效。
又可以再分為漸減法跟漸增法,
看是要從最原始的code慢慢加東西上去,
還是要從現有的code慢慢減少東西。
其實跟分段法算是相關的方法。

4. 模型建立法
最困難的辦法,
但系統愈複雜,問題愈離奇,這個辦法反而有效率。
把出問題的區塊想成是黑盒子,
有目的性的丟一些輸入資料進去,
一定會出來一些不符預期的資料,
此時去建立模型來解說為什麼會發生這個狀況。
又像是偵探辦案,
去搜集一些線索,建立論點,
進一步還原出bug產生的原因。

舉個簡單的例子,
預期答案是0x0C,卻得到0x18
預期答案是0x0F,卻得到0x1E
想一想~想一想~
不用看code就知道問題怎麼解決了。

5. 休息一下,做點別的事。
從撞牆的思路逃脫出來,一定有什麼你沒想到,
一定有什麼是你信以為真的事錯了。



沒有留言: