ROSE 編譯器框架/如何修復錯誤
外觀
如果你正在嘗試修復一個錯誤(你自己的錯誤或分配給你修復的錯誤)。以下是一些執行工作的高階步驟
只有當你可以重現錯誤時,你才能修復它。這一步可能比聽起來更困難。為了重現錯誤,你必須
- 找到一個合適的輸入檔案
- 找到一個合適的翻譯器:ROSE 附帶的翻譯器很容易找到。但當你詢問使用者編寫的翻譯器時,請耐心真誠。
- 找到類似/相同的軟體和硬體環境:錯誤可能只在使用特定軟體配置的特定平臺上出現
此步驟的可能結果
- 你可以可靠地重現錯誤。Bingo!繼續下一步。
- 你無法重現錯誤。要麼錯誤報告無效,要麼你必須繼續嘗試。
- 你偶爾可以重現錯誤(隨機錯誤)。哎呀。這有點困難。
一旦你可以重現錯誤。你必須使用像 gdb 這樣的偵錯程式來識別錯誤的根本原因。
常見的步驟
- 儘可能簡化輸入程式碼:用一個巨大的輸入除錯問題可能非常困難。始終嘗試準備最簡單的程式碼,該程式碼可以觸發錯誤。
- 通常,你必須使用二分搜尋方法來縮小輸入程式碼範圍:一次只使用一半輸入進行嘗試。遞迴地將輸入檔案分成兩部分,直到你無法再切割,但仍然可以觸發錯誤。
- 向前跟蹤:對於翻譯器,它通常接受輸入並在生成最終輸出之前生成中間結果。使用偵錯程式在程式碼的每個關鍵階段設定斷點,以檢查中間結果是否符合預期。
- 向後跟蹤:類似於之前的技術。但你只是回溯問題。
任何錯誤修復提交都應包含
- 迴歸測試:這樣,檢查規則可以確保錯誤確實已修復,並且不會有任何進一步的程式碼更改導致錯誤再次出現。