相信自己能夠把問題調試好
- 確信問題是可以追查並解決的
- 給調試工作留出足夠的時間
- 安排好工作環境,是自己不受干擾
- 遇到難題的時候可以先睡一覺
- 不要徹底放棄
- 投入精力去學習環境、工具及知識
高效地重現程序中的問題
- 如果能夠準確重現程序中的問題,那麼我們的調試過程就得以簡化
- 創建一個簡短且自足的範例,以便重現程序中的問題
- 設法創建一套可以製作副本的執行環境
- 採用版本控制系統給特定的軟件版本打上標記,以便根據此標記來獲取與之對應的代碼
修改完代碼後,要能夠儘快看到結果
- 設法在修改代碼之後儘快看到其結果,以提升調試的效率
- 配置一套快速的自動化的構建及部署流程
- 測試軟件時,要令其儘快地將故障暴露出來
將複雜的測試場景自動化
- 通過腳本語言來自動執行復雜的測試用例
使自己儘可能多地觀察到與調試有關的數據
- 如果能夠同時看到比較多地數據,那我們就可以更加專注的進行調試,從而找到數據所體現出的模式以及數據之間的相互關係
- 儘可能地將顯示區域擴至最大
- 把相對靜態的數據打印到紙上
考慮對軟件進行更新
- 在軟件更新之後的環境裏面重新嘗試你所編寫的代碼,看看這次會不會出錯
- 不要對更新軟件所帶來的效果抱有過高的期望
- 要考慮因第三方組件而引發bug的可能性
查看第三方組件源代碼,以瞭解其用法
- 如果你依賴某個第三方組件,那麼i、就應該獲取其源代碼
- 通過查看第三方組件的源代碼探尋與第三方API及一些奇怪的錯誤消息有關的問題。
- 要和第三方程序庫的debug版本相鏈接
- 只有當其他辦法都不可行的時候,才需要對第三方的源代碼進行修改
使用專門的監測及測試設備
- 邏輯分析器、總線分析器或協議分析器可以幫助你鎖定接近於硬件層面的問題
- 可以通過自制的設備來探查與硬件有關的問題
- 可以通過將wireshark與以太網集線器相結合、使用管理型交換機或進行命令行捕獲等辦法來監測網絡數據包
使故障更加突出
- 迫使軟件去執行那些可疑的路徑
- 提升某些效果的幅度,令其變得更加突出,以便於我們進行研究
- 對軟件加壓,迫使它走出能夠從容應對負載的那種舒適狀態
- 在版本管理系統中臨時創建一個分支,並把所有的修改都放在這個分支上來做。
從自己的桌面計算機上調試那些不太好用的系統
- 把設備模擬器配置好,以便通過計算機屏幕和鍵盤來調試移動app
- 搭建shim機制,以便使用自己計算機中的工具來調試嵌入式代碼
- 爲遠程訪問做好準備,以便能夠遠程調試客戶的計算機
- 配置KVM over IP設備,以便調試遠程服務器上面的問題
使調試任務自動化
- 把尋找程序故障的過程自動化,使得計算機多費一些功夫去搜尋,從而節省你自己的寶貴時間
開始調試之前與調試完畢之後都要把程序清理乾淨
- 在開始調試重大的bug之前,先要確保代碼能夠達到一定的整潔程度
- 調試完畢之後,要把調試過程中對代碼所做的臨時改動還原回去,並且要把那些有用的代碼提交到代碼庫。
把屬於同一個類型的所有問題全都修復好
- 修復了某一個錯誤之後,我們還需要尋找並解決其他相似的錯誤,並設法保證將來不會再出現此類錯誤