Research Article
Isolating bugs in multithreaded programs using execution suppression
Article first published online: 18 JAN 2011
DOI: 10.1002/spe.1040
Copyright © 2011 John Wiley & Sons, Ltd.
Additional Information
How to Cite
Jeffrey, D., Wang, Y., Tian, C. and Gupta, R. (2011), Isolating bugs in multithreaded programs using execution suppression. Software: Practice and Experience, 41: 1259–1288. doi: 10.1002/spe.1040
Publication History
- Issue published online: 15 SEP 2011
- Article first published online: 18 JAN 2011
- Manuscript Accepted: 25 OCT 2010
- Manuscript Revised: 23 OCT 2010
- Manuscript Received: 16 JUN 2009
- Abstract
- Article
- References
- Cited By
Keywords:
- software debugging;
- multithreading bugs;
- data races;
- atomicity violations;
- order violations;
- memory bugs;
- execution suppression;
- memory corruption propagation
Abstract
Memory-related program failures in multithreaded programs can be caused by a variety of bugs. Concurrency bugs can occur due to unexpected or incorrect thread interleavings during execution. Other kinds of memory bugs, such as buffer overflows and uninitialized reads, may also occur in multithreaded as well as single-threaded programs. Most prior techniques for isolating these bugs are specialized, addressing only one type of concurrency bug or certain types of other memory bugs. The memory corruption caused by these bugs can also undergo significant propagation during program execution. When a program failure finally occurs due to memory corruption, the true root cause of the failure may be effectively concealed as significant portions of memory may have become corrupted. We propose a general framework that can isolate the root cause of any failure in a multithreaded program that involves memory corruption and reveals at least a subset of this memory corruption. This includes three important types of concurrency bugs—data races, atomicity violations, and order violations—as well as other kinds of memory bugs. To account for propagation of memory corruption, our approach uses a dynamic technique called ‘execution suppression’ that iteratively reveals memory corruption in a failing execution to isolate the true root cause of the failure. Copyright © 2011 John Wiley & Sons, Ltd.

1097-024X/asset/olbannerleft.jpg?v=1&s=2d7d001211f2c40f177a231141601e9f52afc1f3)
1097-024X/asset/olbannerright.jpg?v=1&s=3aec7891a8ba78b361ead9743adfc0b6eae6369a)
