Editorial Notes
A corrigendum was issued for this article on January 14, 2019. This can be found under the Source Materials tab.
Abstract
Debugging is difficult. When software fails in production, debugging is even harder, as failure reports usually provide only an incomplete picture of the failing execution. We present a system that answers control-flow queries posed by developers as formal languages, indicating whether the query expresses control flow that is possible or impossible for a given failure report. We consider three separate approaches that trade off precision, expressiveness for failure constraints, and scalability. We also introduce a new subclass of regular languages, the unreliable trace languages, which are particularly suited to answering control-flow queries in polynomial time. Our system answers queries remarkably efficiently when we encode failure constraints and user queries entirely as unreliable trace languages.
Supplemental Material
Available for Download
Corrigendum to "Control-flow recovery from partial failure reports", by Ohmann et al., PLDI '17 Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation
The archive contains three articles of supplemental material: (1) a virtual machine artifact for reproducing the experimental results from the paper, (2) a report of supplemental proofs for the techniques and language classes introduced in the conference paper, and (3) the result data used to generate all plots in the paper.
- C. Allauzen, M. Riley, J. Schalkwyk, W. Skut, and M. Mohri. OpenFst: A general and efficient weighted finite-state transducer library. In CIAA, 2007. Google Scholar
Digital Library
- R. Alur and P. Madhusudan. Adding nesting structure to words. In Developments in Language Theory, 10th International Conference, DLT 2006, Santa Barbara, CA, USA, volume 4036 of Lecture Notes in Computer Science, pages 1–13. Springer, 2006. ISBN 3-540-35428-X. Google Scholar
Digital Library
- R. Alur, A. Bouajjani, and J. Esparza. Model checking procedural programs. Handbook of Model Checking. Springer, 2015.Google Scholar
- D. M. Berris, A. Veitch, N. Heintze, E. Anderson, and N. Wang. XRay: A function call tracing system. Technical report, Google Inc., 2016.Google Scholar
- Y. Cao, H. Zhang, and S. Ding. SymCrash: selective recording for reproducing crashes. In ACM/IEEE International Conference on Automated Software Engineering, ASE ’14, Vasteras, Sweden. ACM, 2014. ISBN 978-1-4503-3013-8. Google Scholar
Digital Library
- N. Chen and S. Kim. STAR: stack trace based automatic crash reproduction via symbolic execution. IEEE Trans. Software Eng., 41(2):198–220, 2015.Google Scholar
Cross Ref
- J. Clause and A. Orso. A technique for enabling and supporting debugging of field failures. In Proceedings of the 29th international conference on Software Engineering, ICSE ’07, pages 261–270. IEEE Computer Society, 2007. ISBN 0-7695- 2828-7. 10. Google Scholar
Digital Library
- O. Crameri, R. Bianchini, and W. Zwaenepoel. Striking a new balance between program instrumentation and debugging time. In Proceedings of the sixth conference on Computer systems, EuroSys ’11. ACM, 2011. ISBN 978-1-4503-0634-8. Google Scholar
Digital Library
- V. Dallmeier, C. Lindig, and A. Zeller. Lightweight defect localization for Java. In ECOOP 2005 - Object-Oriented Programming, 19th European Conference, Glasgow, UK, volume 3586 of Lecture Notes in Computer Science, pages 528–550. Springer, 2005. Google Scholar
Digital Library
- ISBN 3-540-27992-X.Google Scholar
- L. D’Antoni. The symbolic automata library. https:// github.com/lorisdanto/symbolicautomata, 2016.Google Scholar
- L. D’Antoni and R. Alur. Symbolic visibly pushdown automata. In Computer Aided Verification - 26th International Conference, CAV 2014, Held as Part of the Vienna Summer of Logic, VSL 2014, Vienna, Austria, volume 8559 of Lecture Notes in Computer Science, pages 209–225. Springer, 2014. ISBN 978-3-319-08866-2. Google Scholar
Digital Library
- H. Do, S. G. Elbaum, and G. Rothermel. Supporting controlled experimentation with testing techniques: An infrastructure and its potential impact. Empirical Software Engineering, 10 (4):405–435, 2005. Google Scholar
Digital Library
- Y. Feng, X. Wang, I. Dillig, and C. Lin. Explorer: query- and demand-driven exploration of interprocedural control flow properties. In Proceedings of the 2015 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2015, Pittsburgh, PA, USA, pages 520–534. ACM, 2015. ISBN 978-1-4503-3689-5. Google Scholar
Digital Library
- H. N. Gabow, S. N. Maheswari, and L. J. Osterweil. On two problems in the generation of program test paths. IEEE Trans. Software Eng., 2(3):227–231, 1976. Google Scholar
Digital Library
- R. Gupta, M. L. Soffa, and J. Howard. Hybrid slicing: integrating dynamic information with static analysis. ACM Trans. Softw. Eng. Methodol., 6(4):370–397, 1997. ISSN 1049-331X. 261644. Google Scholar
Digital Library
- W. Jin and A. Orso. BugRedux: reproducing field failures for in-house debugging. In Proceedings of the 2012 International Conference on Software Engineering, ICSE 2012, pages 474– 484. IEEE Press, 2012. ISBN 978-1-4673-1067-3. Google Scholar
Digital Library
- B. Kasikci, T. Ball, G. Candea, J. Erickson, and M. Musuvathi. Efficient tracing of cold code via bias-free sampling. In 2014 USENIX Annual Technical Conference, USENIX ATC ’14, Philadelphia, PA, USA, pages 243–254. USENIX Association, 2014. Google Scholar
Digital Library
- O. Klíma and L. Polák. Hierarchies of piecewise testable languages. In Developments in Language Theory, 12th International Conference, DLT 2008, Kyoto, Japan, volume 5257 of Lecture Notes in Computer Science, pages 479– 490. Springer, 2008. ISBN 978-3-540-85779-2. Google Scholar
Digital Library
- A. J. Ko and B. A. Myers. Extracting and answering why and why not questions about Java program output. ACM Trans. Softw. Eng. Methodol., 20(2), 2010. Google Scholar
Digital Library
- D. Kozen. Lower bounds for natural proof systems. In 18th Annual Symposium on Foundations of Computer Science, Providence, Rhode Island, USA, pages 254–266. IEEE, 1977. Google Scholar
Digital Library
- A. Lal, J. Lim, M. Polishchuk, and B. Liblit. BTrace: Path optimization for debugging. Technical Report 1535, University of Wisconsin-Madison, Oct. 2005.Google Scholar
- T. D. LaToza and B. A. Myers. Developers ask reachability questions. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1, ICSE 2010, Cape Town, South Africa, pages 185–194. ACM, 2010. ISBN 978-1-60558-719-6. Google Scholar
Digital Library
- C. Lattner and V. Adve. LLVM: A compilation framework for lifelong program analysis & transformation. In Proceedings of the 2004 International Symposium on Code Generation and Optimization (CGO’04). IEEE, Mar. 2004. Google Scholar
Digital Library
- B. Liblit, A. Aiken, A. X. Zheng, and M. I. Jordan. Bug isolation via remote program sampling. In PLDI 2003. ACM, 2003. ISBN 1-58113-662-5. Google Scholar
Digital Library
- R. Manevich, M. Sridharan, S. Adams, M. Das, and Z. Yang. PSE: Explaining program failures via postmortem static analysis. In Proceedings of the 12th ACM SIGSOFT Twelfth International Symposium on Foundations of Software Engineering, SIGSOFT ’04/FSE-12, pages 63–72, New York, NY, USA, 2004. ACM. ISBN 1-58113-855-5. Google Scholar
Digital Library
- S. S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann, 1997. ISBN 1-55860-320-4. Google Scholar
Digital Library
- A. Nishimatsu, M. Jihira, S. Kusumoto, and K. Inoue. Callmark slicing: an efficient and economical way of reducing slice. In Proceedings of the 21st international conference on Software engineering, ICSE ’99, pages 422–431, New York, NY, USA, 1999. ACM. ISBN 1-58113-074-0. Google Scholar
Digital Library
- P. Ohmann and B. Liblit. Lightweight control-flow instrumentation and postmortem analysis in support of debugging. In 28th International Conference on Automated Software Engineering (ASE 2013). IEEE and ACM, Nov. 2013. Google Scholar
Digital Library
- P. Ohmann and B. Liblit. CSIclipse: presenting crash analysis data to developers. In Proceedings of the 2015 Workshop on Eclipse Technology eXchange, ETX 2015, Pittsburgh, PA, USA, pages 7–12. ACM, 2015. ISBN 978-1-4503-3904-9. Google Scholar
Digital Library
- P. Ohmann, D. B. Brown, B. Liblit, and T. W. Reps. Recovering execution data from incomplete observations. In Proceedings of the 13th International Workshop on Dynamic Analysis, WODA 2015, Pittsburgh, PA, USA, pages 19–24. ACM, 2015. ISBN 978-1-4503-3909-4. Google Scholar
Digital Library
- P. Ohmann, D. B. Brown, N. Neelakandan, J. Linderoth, and B. Liblit. Optimizing customized program coverage. In Proceedings of the 31st IEEE/ACM International Conference on Automated Software Engineering, ASE 2016, Singapore, pages 27–38. ACM, 2016. ISBN 978-1-4503-3845-5. Google Scholar
Digital Library
- P. Ohmann, A. Brooks, L. D’Antoni, and B. Liblit. Supporting proofs for control-flow recovery from partial failure reports. Technical Report 1845, University of Wisconsin–Madison, Apr. 2017.Google Scholar
- A. Orso, D. Liang, M. J. Harrold, and R. Lipton. Gamma system: continuous evolution of software after deployment. In Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis, ISSTA ’02, pages 65–69, New York, NY, USA, 2002. ACM. ISBN 1-58113-562-9. Google Scholar
Digital Library
- C. Pavlopoulou and M. Young. Residual test coverage monitoring. In Proceedings of the 1999 International Conference on Software Engineering, ICSE’ 99, Los Angeles, CA, USA, pages 277–284. ACM, 1999. ISBN 1-58113-074-0. Google Scholar
Digital Library
- J.-E. Pin. Syntactic semigroups. In Handbook of formal languages, pages 679–746. Springer, 1997. Google Scholar
Digital Library
- T. Place, L. van Rooijen, and M. Zeitoun. Separating regular languages by piecewise testable and unambiguous languages. In Mathematical Foundations of Computer Science - 38th International Symposium, MFCS 2013, Klosterneuburg, Austria, volume 8087 of Lecture Notes in Computer Science, pages 729– 740. Springer, 2013. ISBN 978-3-642-40312-5.Google Scholar
- J. Rößler, A. Zeller, G. Fraser, C. Zamfir, and G. Candea. Reconstructing core dumps. In ICST ’13: Proceedings of the Sixth IEEE International Conference on Software Testing, Verification and Validation. IEEE, Mar. 2013. Google Scholar
Digital Library
- G. Rothermel, S. Elbaum, A. Kinneer, and H. Do. Software– artifact infrastructure repository, Sept. 2006.Google Scholar
- A. Rountev, S. Kagan, and M. Gibas. Static and dynamic analysis of call chains in Java. In Proceedings of the ACM/SIGSOFT International Symposium on Software Testing and Analysis, ISSTA 2004, pages 1–11. ACM, 2004. ISBN 1-58113-820-2. Google Scholar
Digital Library
- I. Simon. Piecewise testable events. In Automata Theory and Formal Languages, 2nd GI Conference, Kaiserslautern, volume 33 of Lecture Notes in Computer Science, pages 214–222. Springer, 1975. Google Scholar
Digital Library
- ISBN 3-540-07407-4.Google Scholar
- M. M. Tikir and J. K. Hollingsworth. Efficient online computation of statement coverage. Journal of Systems and Software, 78(2):146–165, 2005. Google Scholar
Digital Library
- M. Veanes. Applications of symbolic finite automata. In Implementation and Application of Automata - 18th International Conference, CIAA 2013, Halifax, NS, Canada, volume 7982 of Lecture Notes in Computer Science, pages 16–23. Springer, 2013. ISBN 978-3-642-39273-3. Google Scholar
Digital Library
- M. Veanes, P. de Halleux, and N. Tillmann. Rex: Symbolic regular expression explorer. In 3rd International Conference on Software Testing, Verification and Validation, ICST 2010, Paris, France, pages 498–507. IEEE, 2010. ISBN 978-0-7695-3990-4. Google Scholar
Digital Library
- R. Wu, X. Xiao, S. Cheung, H. Zhang, and C. Zhang. Casper: an efficient approach to call trace collection. In Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL 2016, pages 678–690. ACM, 2016. ISBN 978-1-4503-3549-2. Google Scholar
Digital Library
- C. Zamfir and G. Candea. Execution synthesis: a technique for automated software debugging. In Proceedings of the 5th European conference on Computer systems, EuroSys ’10, pages 321–334. ACM, 2010. ISBN 978-1-60558-577-2. Google Scholar
Digital Library
Index Terms
Control-flow recovery from partial failure reports
Recommendations
Control-flow recovery from partial failure reports
PLDI 2017: Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and ImplementationDebugging is difficult. When software fails in production, debugging is even harder, as failure reports usually provide only an incomplete picture of the failing execution. We present a system that answers control-flow queries posed by developers as ...
Failure recovery: when the cure is worse than the disease
HotOS'13: Proceedings of the 14th USENIX conference on Hot Topics in Operating SystemsCloud services inevitably fail: machines lose power, networks become disconnected, pesky software bugs cause sporadic crashes, and so on. Unfortunately, failure recovery itself is often faulty; e.g. recovery can accidentally recursively replicate small ...






Comments