ROSE Compiler Framework/How to fix a bug
If you are trying to fix a bug ( your own or a bug assigned to you to fix). Here are high level steps to do the work
Reproduce the bug[edit | edit source]
You can only fix a bug when you can reproduce it. This step may be more difficult than it sounds. In order to reproduce a bug, you have to
- find a proper input file
- find a proper translator: a translator shipped with ROSE is easy to find. But be patient and sincere when you ask for a translator written by users.
- find a similar/identical software and hardware environment: a bug may only appear on a specific platform when a specific software configuration is used
Possible results for this step:
- You can reproduce the bug reliably. Bingo! Go to the next step.
- You cannot reproduce the bug. Either the bug report is invalid or you have to keep trying.
- You can reproduce the bug once a while (random errors). Oops. This is kind of difficult situation.
Find causes of the bug[edit | edit source]
Once you can reproduce the bug. You have to identify the root cause of the bug using a debugger like gdb.
Common steps involved
- simplify the input code as much as possible: It can be very hard to debug a problem with a huge input. Always try to prepare the simplest possible code which can just trigger the bug.
- Often, you have to use a binary search approach to narrow down the input code: only use half of the input at a time to try. Recursively cut the input file into two parts until no further cut is possible while you can still trigger the bug.
- forward tracking: for the translator, it usually takes input and generate intermediate results before the final output is generated. Using a debugger to set break points at each critical stages of the code to check if the intermediate results are what you expect.
- backwards tracking: similar to the previous techniques. But you just back tracking the problem.
Fix the bug[edit | edit source]
Any bug fix commit should contain
- a regression test: so make check rules can make sure the bug is actually fixed and no further code changes will make the bug relapse.