Debugging failures of deployed concurrent software is important for quality assurance. However, such failures are difficult to debug because their behavior is non-deterministic and limited information can be obtained ...
详细信息
ISBN:
(纸本)9781450381048
Debugging failures of deployed concurrent software is important for quality assurance. However, such failures are difficult to debug because their behavior is non-deterministic and limited information can be obtained with conventional means. Reverse debuggers such as REPT [10] assists with debugging by recovering datavalues before the failure. This is achieved by using a hardware-tracer to log control-flowinformation, then using the information and a conventional coredump to recover datavalues via reverse-execution at machine-level. REPT's algorithm for datavalue recovery is reliable and fast. But the implementation cost is high because of its dependence on architecture. Applying REPT to more abstract IR (Intermediate Representation) level instructions in an attempt to counter this yielded limited results with low accuracy compared to the original x86_64 implementation. In this paper, we present STRAB (State Recovery at Abstract-level), a collection of our proposed methods to solve these problems. STRABworks in two phases. First, the datavalues in the core-dump are lifted from machine-level to IR-level using rich debug information and mid-recovery lifting. Second, REPT modified with our hybrid memory location resolving algorithm to solve problems that occur only at IR-level is used to recover datavalues with higher accuracy than REPT. Experimental results on a variety of real-world concurrent programs show that STRAB has significantly higher accuracy compared to REPT at IR-level (+40% on average) with only minor slowdowns (x2.7 on average), while also achieving architecture-independence.
暂无评论