Effective Debugging——通用的方法與做法

相信自己能夠把問題調試好

  • 確信問題是可以追查並解決的
  • 給調試工作留出足夠的時間
  • 安排好工作環境,是自己不受干擾
  • 遇到難題的時候可以先睡一覺
  • 不要徹底放棄
  • 投入精力去學習環境、工具及知識

高效地重現程序中的問題

  • 如果能夠準確重現程序中的問題,那麼我們的調試過程就得以簡化
  • 創建一個簡短且自足的範例,以便重現程序中的問題
  • 設法創建一套可以製作副本的執行環境
  • 採用版本控制系統給特定的軟件版本打上標記,以便根據此標記來獲取與之對應的代碼

修改完代碼後,要能夠儘快看到結果

  • 設法在修改代碼之後儘快看到其結果,以提升調試的效率
  • 配置一套快速的自動化的構建及部署流程
  • 測試軟件時,要令其儘快地將故障暴露出來

將複雜的測試場景自動化

  • 通過腳本語言來自動執行復雜的測試用例

使自己儘可能多地觀察到與調試有關的數據

  • 如果能夠同時看到比較多地數據,那我們就可以更加專注的進行調試,從而找到數據所體現出的模式以及數據之間的相互關係
  • 儘可能地將顯示區域擴至最大
  • 把相對靜態的數據打印到紙上

考慮對軟件進行更新

  • 在軟件更新之後的環境裏面重新嘗試你所編寫的代碼,看看這次會不會出錯
  • 不要對更新軟件所帶來的效果抱有過高的期望
  • 要考慮因第三方組件而引發bug的可能性

查看第三方組件源代碼,以瞭解其用法

  • 如果你依賴某個第三方組件,那麼i、就應該獲取其源代碼
  • 通過查看第三方組件的源代碼探尋與第三方API及一些奇怪的錯誤消息有關的問題。
  • 要和第三方程序庫的debug版本相鏈接
  • 只有當其他辦法都不可行的時候,才需要對第三方的源代碼進行修改

使用專門的監測及測試設備

  • 邏輯分析器、總線分析器或協議分析器可以幫助你鎖定接近於硬件層面的問題
  • 可以通過自制的設備來探查與硬件有關的問題
  • 可以通過將wireshark與以太網集線器相結合、使用管理型交換機或進行命令行捕獲等辦法來監測網絡數據包

使故障更加突出

  • 迫使軟件去執行那些可疑的路徑
  • 提升某些效果的幅度,令其變得更加突出,以便於我們進行研究
  • 對軟件加壓,迫使它走出能夠從容應對負載的那種舒適狀態
  • 在版本管理系統中臨時創建一個分支,並把所有的修改都放在這個分支上來做。

從自己的桌面計算機上調試那些不太好用的系統

  • 把設備模擬器配置好,以便通過計算機屏幕和鍵盤來調試移動app
  • 搭建shim機制,以便使用自己計算機中的工具來調試嵌入式代碼
  • 爲遠程訪問做好準備,以便能夠遠程調試客戶的計算機
  • 配置KVM over IP設備,以便調試遠程服務器上面的問題

使調試任務自動化

  • 把尋找程序故障的過程自動化,使得計算機多費一些功夫去搜尋,從而節省你自己的寶貴時間

開始調試之前與調試完畢之後都要把程序清理乾淨

  • 在開始調試重大的bug之前,先要確保代碼能夠達到一定的整潔程度
  • 調試完畢之後,要把調試過程中對代碼所做的臨時改動還原回去,並且要把那些有用的代碼提交到代碼庫。

把屬於同一個類型的所有問題全都修復好

  • 修復了某一個錯誤之後,我們還需要尋找並解決其他相似的錯誤,並設法保證將來不會再出現此類錯誤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章