skip to main content
research-article
Free Access

Modern debugging: the art of finding a needle in a haystack

Published:26 October 2018Publication History
Skip Abstract Section

Abstract

Systematic use of proven debugging approaches and tools lets programmers address even apparently intractable bugs.

References

  1. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  2. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  3. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  4. Beschastnikh, I., Wang, P., Brun, Y., and Ernst, M.D. Debugging distributed systems. Commun. ACM 59, 8 (Aug. 2016), 32--37. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  6. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  7. 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 ScholarGoogle Scholar
  8. Cadar, C. and Sen, K. Symbolic execution for software testing: Three decades later. Commun. ACM 56, 2 (Feb. 2013), 82--90. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Cantrill, B. and Bonwick, J. Real-world concurrency. Commun. ACM 51, 11 (Nov. 2008), 34--39. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Duvall, P.M., Matyas, S., and Glover, A. Continuous Integration: Improving Software Quality and Reducing Risk. Pearson Education, Boston, MA, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. 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 ScholarGoogle Scholar
  12. 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 ScholarGoogle Scholar
  13. 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 ScholarGoogle ScholarCross RefCross Ref
  14. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  15. Kernighan, B.W. Sometimes the old ways are best. IEEE Software 25, 6 (Nov. 2008), 18--19. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  17. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  18. Margosis, A. and Russinovich, M.E. Windows Sysinternals Administrator's Reference. Microsoft Press, Redmond, WA, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  20. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  21. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  22. Neumann, P.G. Computer Related Risks. Addison-Wesley, Reading, MA, 1995. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Nielson, F., Nielson, H.R., and Hankin, C. Principles of Program Analysis. Springer, Berlin, Germany, 2015. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. O'Dell, D.H. The debugging mind-set. Commun. ACM 60, 6 (June 2017), 40--45. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Orebaugh, A., Ramirez, G., and Beale, J. Wireshark & Ethereal Network Protocol Analyzer Toolkit Syngress, Cambridge, MA, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  27. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  28. Runeson, P. A survey of unit-testing practices. IEEE Software 23, 4 (July 2006), 22--29. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  30. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  31. Spinellis, D. Code Reading: The Open Source Perspective. Addison-Wesley, Boston, MA, 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Spinellis, D. Working with Unix tools. IEEE Software 22, 6 (Nov./Dec. 2005), 9--11. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Spinellis, D. Debuggers and logging frameworks. IEEE Software 23, 3 (May/June 2006), 98--99. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Spinellis, D. Differential debugging. IEEE Software 30, 5 (Sept./Oct. 2013), 19--21. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. Stahl, T. and Volter, M. Model-Driven Software Development: Technology, Engineering, Management. John Wiley & Sons, Inc., New York, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Tseitlin, A. The anti-fragile organization. Commun. ACM 56, 8 (Aug. 2013), 40--44. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. 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 ScholarGoogle Scholar
  38. Zeller, A. Automated debugging: Are we close? Computer 34, 1 (Nov. 2001), 26--31. Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  40. Zeller, A. Why Programs Fail: A Guide to Systematic Debugging, Second Edition. Morgan Kaufmann, Burlington, MA, 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Zeller, A. and Hildebrandt, R. Simplifying and isolating failure-inducing input. IEEE Transactions on Software Engineering 28, 2 (Feb. 2002), 183--200. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Modern debugging: the art of finding a needle in a haystack

        Recommendations

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in

        Full Access

        • Published in

          cover image Communications of the ACM
          Communications of the ACM  Volume 61, Issue 11
          November 2018
          156 pages
          ISSN:0001-0782
          EISSN:1557-7317
          DOI:10.1145/3289258
          Issue’s Table of Contents

          Copyright © 2018 ACM

          Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

          Publisher

          Association for Computing Machinery

          New York, NY, United States

          Publication History

          • Published: 26 October 2018

          Permissions

          Request permissions about this article.

          Request Permissions

          Check for updates

          Qualifiers

          • research-article
          • Popular
          • Refereed

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader

        HTML Format

        View this article in HTML Format .

        View HTML Format