Software Profiling for Deterministic Replay Debugging of User Code
Significant time is spent by companies trying to reproduce and fix bugs. We recently proposed a hardware logging approach called BugNet to aid debugging, by capturing the last few million instructions that occurred right before a bug that results in a crash. A developer can then use this log to deterministically replay the recent portion of execution that lead to the crash. We call this Deterministic Replay Debugging. In this paper, we present a software version of BugNet to be used by developers and quality assurance engineers to efficiently track down bugs. Our software approach does not require any hardware support, and the logs can be used to find bugs that result in a crash as well as those that cause wrong answers, instead of only focusing on bugs that cause crashes as in BugNet. The approach only logs the load values that have changed in order to provide deterministic replay across system calls, interrupts and DMA transfers. In addition, we present implementation details for our deterministic replay debugger. This includes detailed analysis measuring exactly how much execution needs to be logged in order to make sure we have captured the cause of the bug, and quantifying the benefit of using dynamic slicing to aid our deterministic replay debugger.
Pre-2018 CSE ID: CS2005-0839