Xiaodong Zhang, Z. Yang, Q. Zheng, Yu Hao, Pei Liu, Lechen Yu, Ming Fan, Ting Liu
{"title":"调试多线程程序,就好像它们是顺序的一样","authors":"Xiaodong Zhang, Z. Yang, Q. Zheng, Yu Hao, Pei Liu, Lechen Yu, Ming Fan, Ting Liu","doi":"10.1109/SATE.2016.20","DOIUrl":null,"url":null,"abstract":"Debugging multithreaded software is challenging because the basic assumption that underlies sequential software debugging, i.e. the program behavior is deterministic under fixed inputs, is no longer valid due to the nondeterminism brought by thread scheduling. In this paper, we propose a proactive debugging method to restore this basic assumption so that programmers can debug multithreaded programs as if they were sequential. Our approach is based on the synergistic integration of a set of new symbolic analysis and dynamic analysis techniques. In particular, symbolic analysis is used to investigate the program behavior under multiple thread interleavings and then drive the dynamic execution to new branches. Dynamic analysis is used to execute these new branches and in turn guide the symbolic analysis further. The net effect of applying this feedback loop is a systematic and complete coverage of the program behavior under a fixed test input. We have implemented the proposed method in a software tool called Proactive-Debugger. Our experiments show that Proactive-Debugger outperforms both ESBMC and Maple, two state-of-the-art testing tools for detecting and reproducing bugs in multithreaded programs.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"143 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"4","resultStr":"{\"title\":\"Debugging Multithreaded Programs as if They Were Sequential\",\"authors\":\"Xiaodong Zhang, Z. Yang, Q. Zheng, Yu Hao, Pei Liu, Lechen Yu, Ming Fan, Ting Liu\",\"doi\":\"10.1109/SATE.2016.20\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"Debugging multithreaded software is challenging because the basic assumption that underlies sequential software debugging, i.e. the program behavior is deterministic under fixed inputs, is no longer valid due to the nondeterminism brought by thread scheduling. In this paper, we propose a proactive debugging method to restore this basic assumption so that programmers can debug multithreaded programs as if they were sequential. Our approach is based on the synergistic integration of a set of new symbolic analysis and dynamic analysis techniques. In particular, symbolic analysis is used to investigate the program behavior under multiple thread interleavings and then drive the dynamic execution to new branches. Dynamic analysis is used to execute these new branches and in turn guide the symbolic analysis further. The net effect of applying this feedback loop is a systematic and complete coverage of the program behavior under a fixed test input. We have implemented the proposed method in a software tool called Proactive-Debugger. Our experiments show that Proactive-Debugger outperforms both ESBMC and Maple, two state-of-the-art testing tools for detecting and reproducing bugs in multithreaded programs.\",\"PeriodicalId\":344531,\"journal\":{\"name\":\"2016 International Conference on Software Analysis, Testing and Evolution (SATE)\",\"volume\":\"143 1\",\"pages\":\"0\"},\"PeriodicalIF\":0.0000,\"publicationDate\":\"2016-11-01\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"4\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"2016 International Conference on Software Analysis, Testing and Evolution (SATE)\",\"FirstCategoryId\":\"1085\",\"ListUrlMain\":\"https://doi.org/10.1109/SATE.2016.20\",\"RegionNum\":0,\"RegionCategory\":null,\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"\",\"JCRName\":\"\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1109/SATE.2016.20","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
Debugging Multithreaded Programs as if They Were Sequential
Debugging multithreaded software is challenging because the basic assumption that underlies sequential software debugging, i.e. the program behavior is deterministic under fixed inputs, is no longer valid due to the nondeterminism brought by thread scheduling. In this paper, we propose a proactive debugging method to restore this basic assumption so that programmers can debug multithreaded programs as if they were sequential. Our approach is based on the synergistic integration of a set of new symbolic analysis and dynamic analysis techniques. In particular, symbolic analysis is used to investigate the program behavior under multiple thread interleavings and then drive the dynamic execution to new branches. Dynamic analysis is used to execute these new branches and in turn guide the symbolic analysis further. The net effect of applying this feedback loop is a systematic and complete coverage of the program behavior under a fixed test input. We have implemented the proposed method in a software tool called Proactive-Debugger. Our experiments show that Proactive-Debugger outperforms both ESBMC and Maple, two state-of-the-art testing tools for detecting and reproducing bugs in multithreaded programs.