Abstract
Systematic use of proven debugging approaches and tools lets programmers address even apparently intractable bugs.
- Ayewah, N., Hovemeyer, D., Morgenthaler, J.D., Penix, J., and Pugh, W. Using static analysis to find bugs. IEEE Software 25, 5 (Sept. 2008), 22--29. Google ScholarDigital Library
- Bailis, P., Alvaro, P., and Gulwani, S. Research for practice: Tracing and debugging distributed systems; programming by examples. Commun. ACM 60, 7 (July 2017), 46--49. Google ScholarDigital Library
- Beller, M., Spruit, N., Spinellis, D., and Zaidman, A. On the dichotomy of debugging behavior among programmers. In Proceedings of the 40<sup>th</sup> International Conference on Software Engineering (Gothenburg, Sweden, May 27-June 3). ACM Press, New York, 2018, 572--583. Google ScholarDigital Library
- Beschastnikh, I., Wang, P., Brun, Y., and Ernst, M.D. Debugging distributed systems. Commun. ACM 59, 8 (Aug. 2016), 32--37. Google ScholarDigital Library
- Bessey, A., Block, K., Chelf, B., Chou, A., Fulton, B., Hallem, S., Henri-Gros, C., Kamsky, A., McPeak, S., and Engler, D. A few billion lines of code later: Using static analysis to find bugs in the real world. Commun. ACM 53, 2 (Feb. 2010), 66--75. Google ScholarDigital Library
- Böhme, M., Soremekun, E.O., Chattopadhyay, S., Ugherughe, E., and Zeller, A. Where is the bug and how is it fixed? An experiment with practitioners. In Proceedings of the 11<sup>th</sup> Joint Meeting on Foundations of Software Engineering (Paderborn, Germany, Sept. 4--8). ACM Press, New York, 2017, 117--128. Google ScholarDigital Library
- Branco, R.R. Ltrace internals. In Proceedings of the Linux Symposium, A.J. Hutton and C.C. Ross, Eds. (Ottawa, ON, Canada, June 27--30, 2007), 41--52; https://www.kernel.org/doc/ols/2007/ols2007v1-pages-41-52.pdfGoogle Scholar
- Cadar, C. and Sen, K. Symbolic execution for software testing: Three decades later. Commun. ACM 56, 2 (Feb. 2013), 82--90. Google ScholarDigital Library
- Cantrill, B. and Bonwick, J. Real-world concurrency. Commun. ACM 51, 11 (Nov. 2008), 34--39. Google ScholarDigital Library
- Duvall, P.M., Matyas, S., and Glover, A. Continuous Integration: Improving Software Quality and Reducing Risk. Pearson Education, Boston, MA, 2007. Google ScholarDigital Library
- Eigler, F.C. Problem solving with Systemtap. In Proceedings of the Linux Symposium, A. J. Hutton and C. C. Ross, Eds. (Ottawa, ON, Canada, July 19--22, 2006), 261--268; https://www.kernel.org/doc/ols/2006/ols2006v1-pages-261-268.pdfGoogle Scholar
- Engblom, J. A review of reverse debugging. In Proceedings of the 2012 System, Software, SoC and Silicon Debug Conference (Vienna, Austria, Sept. 19--20). Electronic Chips & Systems Design Initiative, Gières, France, 2012, 28--33.Google Scholar
- Graham, S.L., Kessler, P.B., and McKusick, M.K. An execution profiler for modular programs. Software: Practice & Experience 13, 8 (Aug.1983), 671--685.Google ScholarCross Ref
- Gregg, B. and Mauro, J. DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X, and FreeBSD. Prentice Hall Professional, Upper Saddle River, NJ, 2011. Google ScholarDigital Library
- Kernighan, B.W. Sometimes the old ways are best. IEEE Software 25, 6 (Nov. 2008), 18--19. Google ScholarDigital Library
- LeBlanc, T.J. and Mellor-Crummey, J.M. Debugging parallel programs with Instant Replay. IEEE Transactions on Computers C-36, 4 (Apr. 1987), 471--482. Google ScholarDigital Library
- Magnusson, P.S., Christensson, M., Eskilson, J., Forsgren, D., Hallberg, G., Hogberg, J., Larsson, F., Moestedt, A., and Werner, B. Simics: A full system simulation platform. Computer 35, 2 (Feb. 2002), 50--58. Google ScholarDigital Library
- Margosis, A. and Russinovich, M.E. Windows Sysinternals Administrator's Reference. Microsoft Press, Redmond, WA, 2011. Google ScholarDigital Library
- Mernik, M., Heering, J., and Sloane, A.M. When and how to develop domain-specific languages. ACM Computing Surveys 37, 4 (Dec. 2005), 316--344. Google ScholarDigital Library
- Nasehi, S.M., Sillito, J., Maurer, F., and Burns, C. What makes a good code example?: A study of programming Q&A in StackOverflow. In Proceedings of the 28<sup>th</sup> IEEE International Conference on Software Maintenance (Riva del Garda, Trento, Italy, Sept. 23--30). IEEE Press, 2012, 25--34. Google ScholarDigital Library
- Nethercote, N. and Seward, J. Valgrind: A framework for heavyweight dynamic binary instrumentation. In Proceedings of the 28<sup>th</sup> ACM SIGPLAN Conference on Programming Language Design and Implementation (San Diego, CA, June 10--13). ACM Press, New York, 2007, 89--100. Google ScholarDigital Library
- Neumann, P.G. Computer Related Risks. Addison-Wesley, Reading, MA, 1995. Google ScholarDigital Library
- Nielson, F., Nielson, H.R., and Hankin, C. Principles of Program Analysis. Springer, Berlin, Germany, 2015. Google ScholarDigital Library
- O'Dell, D.H. The debugging mind-set. Commun. ACM 60, 6 (June 2017), 40--45. Google ScholarDigital Library
- Orebaugh, A., Ramirez, G., and Beale, J. Wireshark & Ethereal Network Protocol Analyzer Toolkit Syngress, Cambridge, MA, 2006. Google ScholarDigital Library
- Patil, H., Pereira, C., Stallcup, M., Lueck, G., and Cownie, J. Pinplay: A framework for deterministic replay and reproducible analysis of parallel programs. In Proceedings of the Eighth Annual IEEE/ACM International Symposium on Code Generation and Optimization (Toronto, ON, Canada, Apr. 24--28). ACM Press, New York, 2010, 2--11. Google ScholarDigital Library
- Perscheid, M., Siegmund, B., Taeumel, M., and Hirschfeld, R. Studying the advancement in debugging practice of professional software developers. Software Quality Journal 25, 1 (Mar. 2017), 83--110. Google ScholarDigital Library
- Runeson, P. A survey of unit-testing practices. IEEE Software 23, 4 (July 2006), 22--29. Google ScholarDigital Library
- Sack, P., Bliss, B.E., Ma, Z., Petersen, P., and Torrellas, J. Accurate and efficient filtering for the Intel Thread Checker race detector. In Proceedings of the First Workshop on Architectural and System Support for Improving Software Dependability (San Jose, CA, Oct. 21--25). ACM Press, New York, 2006, 34--41. Google ScholarDigital Library
- Serebryany, K., Bruening, D., Potapenko, A., and Vyukov, D. Address-Sanitizer: A fast address sanity checker. In Proceedings of the 2012 USENIX Annual Technical Conference (Boston, MA, June 13--15). USENIX Association, Berkeley, CA, 2012, 309--318. Google ScholarDigital Library
- Spinellis, D. Code Reading: The Open Source Perspective. Addison-Wesley, Boston, MA, 2003. Google ScholarDigital Library
- Spinellis, D. Working with Unix tools. IEEE Software 22, 6 (Nov./Dec. 2005), 9--11. Google ScholarDigital Library
- Spinellis, D. Debuggers and logging frameworks. IEEE Software 23, 3 (May/June 2006), 98--99. Google ScholarDigital Library
- Spinellis, D. Differential debugging. IEEE Software 30, 5 (Sept./Oct. 2013), 19--21. Google ScholarDigital Library
- Stahl, T. and Volter, M. Model-Driven Software Development: Technology, Engineering, Management. John Wiley & Sons, Inc., New York, 2006. Google ScholarDigital Library
- Tseitlin, A. The anti-fragile organization. Commun. ACM 56, 8 (Aug. 2013), 40--44. Google ScholarDigital Library
- Wilkes, M. The Birth and Growth of the Digital Computer. Lecture delivered at the Digital Computer Museum, available through the Computer History Museum, Catalog Number 102695269, Sept. 1979; https://youtu.be/MZGZfsr1KfYGoogle Scholar
- Zeller, A. Automated debugging: Are we close? Computer 34, 1 (Nov. 2001), 26--31. Google ScholarDigital Library
- Zeller, A. Isolating cause-effect chains from computer programs. In Proceedings of the 10<sup>th</sup> ACM SIGSOFT Symposium on Foundations of Software Engineering (Charleston, SC, Nov. 18--22). ACM Press, New York, 2002, 1--10. Google ScholarDigital Library
- Zeller, A. Why Programs Fail: A Guide to Systematic Debugging, Second Edition. Morgan Kaufmann, Burlington, MA, 2009. Google ScholarDigital Library
- Zeller, A. and Hildebrandt, R. Simplifying and isolating failure-inducing input. IEEE Transactions on Software Engineering 28, 2 (Feb. 2002), 183--200. Google ScholarDigital Library
Index Terms
- Modern debugging: the art of finding a needle in a haystack
Recommendations
Replay debugging: leveraging record and replay for program debugging
ISCA '14: Proceeding of the 41st annual international symposium on Computer architecutureHardware-assisted Record and Deterministic Replay (RnR) of programs has been proposed as a primitive for debugging hard-to-repeat software bugs. However, simply providing support for repeatedly stumbling on the same bug does not help diagnose it. For ...
Debugging Debugging
COMPSACW '11: Proceedings of the 2011 IEEE 35th Annual Computer Software and Applications Conference WorkshopsWhen a program fails to accomplish its intended task, debugging is conducted to identify and remove any bugs. The debugging operation itself is not immune to flaws. Empirical evidence suggests many bugs are found after shipping, which calls into ...
Replay debugging: leveraging record and replay for program debugging
ISCA '14Hardware-assisted Record and Deterministic Replay (RnR) of programs has been proposed as a primitive for debugging hard-to-repeat software bugs. However, simply providing support for repeatedly stumbling on the same bug does not help diagnose it. For ...
Comments