跳轉到內容

ROSE 編譯器框架/如何修復錯誤

來自華夏公益教科書,開放的書籍,為開放的世界

如果你正在嘗試修復一個錯誤(你自己的錯誤或分配給你修復的錯誤)。以下是一些執行工作的高階步驟

重現錯誤

[編輯 | 編輯原始碼]

只有當你可以重現錯誤時,你才能修復它。這一步可能比聽起來更困難。為了重現錯誤,你必須

  • 找到一個合適的輸入檔案
  • 找到一個合適的翻譯器:ROSE 附帶的翻譯器很容易找到。但當你詢問使用者編寫的翻譯器時,請耐心真誠。
  • 找到類似/相同的軟體和硬體環境:錯誤可能只在使用特定軟體配置的特定平臺上出現

此步驟的可能結果

  • 你可以可靠地重現錯誤。Bingo!繼續下一步。
  • 你無法重現錯誤。要麼錯誤報告無效,要麼你必須繼續嘗試。
  • 你偶爾可以重現錯誤(隨機錯誤)。哎呀。這有點困難。

查詢錯誤的原因

[編輯 | 編輯原始碼]

一旦你可以重現錯誤。你必須使用像 gdb 這樣的偵錯程式來識別錯誤的根本原因。

常見的步驟

  • 儘可能簡化輸入程式碼:用一個巨大的輸入除錯問題可能非常困難。始終嘗試準備最簡單的程式碼,該程式碼可以觸發錯誤。
    • 通常,你必須使用二分搜尋方法來縮小輸入程式碼範圍:一次只使用一半輸入進行嘗試。遞迴地將輸入檔案分成兩部分,直到你無法再切割,但仍然可以觸發錯誤。
  • 向前跟蹤:對於翻譯器,它通常接受輸入並在生成最終輸出之前生成中間結果。使用偵錯程式在程式碼的每個關鍵階段設定斷點,以檢查中間結果是否符合預期。
  • 向後跟蹤:類似於之前的技術。但你只是回溯問題。

修復錯誤

[編輯 | 編輯原始碼]

任何錯誤修復提交都應包含

  • 迴歸測試:這樣,檢查規則可以確保錯誤確實已修復,並且不會有任何進一步的程式碼更改導致錯誤再次出現。
華夏公益教科書