1.1.找出錯誤來源
Last updated
Was this helpful?
Last updated
Was this helpful?
當面對一個從沒見過的issue, 最困難的在於不知從何開始下手
必須先知道對手(問題發生的源頭)在哪
1.複製問題
在開始追蹤前, 問題要先可以被隨心所欲地重現
製作最小化的測試範例
2.推測問題的來源
以將問題發生點限縮到某次git commit為目標
用git checkout到先前的commit以確定問題的出現
確定問題是因為這次的change, 還是這個問題本來就一直存在
用git bisect來找出問題開始發生的commit
如果確定此問題是在某個coomit後出現的, 但是不確定是從哪個commit後出現的, 可以用git bisect來找出該commit
以將問題發生點限縮到某個fuction為目標
用UI的文字, console或是log上的訊息來推測程式在何處中斷:
1.Exception message
可以透過網路搜尋以推測出Exception的原因, 並進一步推斷出大概做什麼動作時出現問題
2.Print message
Print message通常是開發人員為了作為除錯時的依據所留下, 可以利用print出來的字串搜尋原始碼, 看看原始碼中哪一段有print此message的動作, 藉此定位問題的發生位置
以Visual studio的C++/C#專案為例, 如果在多處都有print相同訊息則可以用在全部的可能處, 讓錯誤重現看程式中斷在何處
3.若問題是crash:
用可以收斂到出現問題的函式
向下搜尋
當問題已經被縮小到某個function, 裡面又呼叫了許多了子function, 必須確定問題是在哪個子function出現, 可以搭配下面的方法:
write log
註解掉