跳转到内容

ROSE 编译器框架/如何修复错误

来自维基教科书,开放的书籍,为开放的世界

如果你正在尝试修复一个错误(你自己的错误或分配给你修复的错误)。以下是一些执行工作的高级步骤

重现错误

[编辑 | 编辑源代码]

只有当你可以重现错误时,你才能修复它。这一步可能比听起来更困难。为了重现错误,你必须

  • 找到一个合适的输入文件
  • 找到一个合适的翻译器:ROSE 附带的翻译器很容易找到。但当你询问用户编写的翻译器时,请耐心真诚。
  • 找到类似/相同的软件和硬件环境:错误可能只在使用特定软件配置的特定平台上出现

此步骤的可能结果

  • 你可以可靠地重现错误。Bingo!继续下一步。
  • 你无法重现错误。要么错误报告无效,要么你必须继续尝试。
  • 你偶尔可以重现错误(随机错误)。哎呀。这有点困难。

查找错误的原因

[编辑 | 编辑源代码]

一旦你可以重现错误。你必须使用像 gdb 这样的调试器来识别错误的根本原因。

常见的步骤

  • 尽可能简化输入代码:用一个巨大的输入调试问题可能非常困难。始终尝试准备最简单的代码,该代码可以触发错误。
    • 通常,你必须使用二分搜索方法来缩小输入代码范围:一次只使用一半输入进行尝试。递归地将输入文件分成两部分,直到你无法再切割,但仍然可以触发错误。
  • 向前跟踪:对于翻译器,它通常接受输入并在生成最终输出之前生成中间结果。使用调试器在代码的每个关键阶段设置断点,以检查中间结果是否符合预期。
  • 向后跟踪:类似于之前的技术。但你只是回溯问题。

修复错误

[编辑 | 编辑源代码]

任何错误修复提交都应包含

  • 回归测试:这样,检查规则可以确保错误确实已修复,并且不会有任何进一步的代码更改导致错误再次出现。
华夏公益教科书