Automated Software Debugging

[ Home | Download | User Guide | Publications | Acknowledgement ]


As part of our research on automated software debugging, we have developed a tool which automates the debugging process and we would like to share this tool with the community.

When to use our tool: Our tool works best on programs which are “mostly correct”. A “mostly correct” program works correctly on most inputs, however there are some inputs which may cause the program to misbehave – crash, hang or produce incorrect results. We have found that our tool is especially helpful for memory corruption bugs, which are usually difficult to find manually because they manifest as incorrect results or a crash, long after the initial memory corruption has occurred.

How does it work: There are two main steps to using our tool- a training step and a debugging step. During the training step, we repeatedly run the program with inputs which produce correct results and at the same time we enable our tool to remember the “behavior” of the program during those passing runs. During the debugging step, we run the program with an input, which causes the program to misbehave. At the same time we enable our tool, which discovers anomalies in the behavior of the failing run. As an output, our tool produces a list of anomalies (a list of program instructions which behaved differently during the failing run as compared to the passing runs), which are most likely to be root cause of the crash or incorrect results.

Our tool is still in research stage and thus it requires a little bit of effort to use. However, we still believe that it is useful to researchers or software developers and we appreciate any feedback.

[ Home | Download | User Guide | Publications | Acknowledgement ]