ROSE 编译器框架/如何修复错误
外观
如果你正在尝试修复一个错误(你自己的错误或分配给你修复的错误)。以下是一些执行工作的高级步骤
只有当你可以重现错误时,你才能修复它。这一步可能比听起来更困难。为了重现错误,你必须
- 找到一个合适的输入文件
- 找到一个合适的翻译器:ROSE 附带的翻译器很容易找到。但当你询问用户编写的翻译器时,请耐心真诚。
- 找到类似/相同的软件和硬件环境:错误可能只在使用特定软件配置的特定平台上出现
此步骤的可能结果
- 你可以可靠地重现错误。Bingo!继续下一步。
- 你无法重现错误。要么错误报告无效,要么你必须继续尝试。
- 你偶尔可以重现错误(随机错误)。哎呀。这有点困难。
一旦你可以重现错误。你必须使用像 gdb 这样的调试器来识别错误的根本原因。
常见的步骤
- 尽可能简化输入代码:用一个巨大的输入调试问题可能非常困难。始终尝试准备最简单的代码,该代码可以触发错误。
- 通常,你必须使用二分搜索方法来缩小输入代码范围:一次只使用一半输入进行尝试。递归地将输入文件分成两部分,直到你无法再切割,但仍然可以触发错误。
- 向前跟踪:对于翻译器,它通常接受输入并在生成最终输出之前生成中间结果。使用调试器在代码的每个关键阶段设置断点,以检查中间结果是否符合预期。
- 向后跟踪:类似于之前的技术。但你只是回溯问题。
任何错误修复提交都应包含
- 回归测试:这样,检查规则可以确保错误确实已修复,并且不会有任何进一步的代码更改导致错误再次出现。