1.1.找出錯誤來源

1.Debug的第一步: 找出問題的來源

  • 當面對一個從沒見過的issue, 最困難的在於不知從何開始下手

    • 必須先知道對手(問題發生的源頭)在哪

2.做法

  • 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出現, 可以搭配下面的方法:

          • print

          • write log

          • 註解掉

Last updated