Debugging Debugging

9,828 views
6,045 views

Published on

Talk recording available! See
http://www.st.cs.uni-saarland.de/zeller/Debugging-Debugging/

"Yesterday, my program worked. Today, it does not. Why?" This paper, originally published at ESEC/FSE 1999, introduced the concept of delta debugging, a simple, yet very effective method for automated debugging.

In 2009, this paper received the ACM SIGSOFT impact award as the most influential software engineering publication of 1999. In his keynote at ESEC/FSE in Amsterdam on August 27, 2009, Andreas Zeller reviews the state of automated debugging in the past and the future. He shares stories about how delta debugging came to be, how it can be hard to be simple, what programmers really need, and what research should do (and should not do) to explore and cater to these needs.

Talk recording available! See
http://www.st.cs.uni-saarland.de/zeller/Debugging-Debugging/

Published in: Technology, Business
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,828
On SlideShare
0
From Embeds
0
Number of Embeds
36
Actions
Shares
0
Downloads
185
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide
  • Elton John - like a Candle in the Wind * Los del Rio - A la tuhuelpa legria macarena Eeeh, macarena * Spice Girls - If you wanna be my lover, you gotta get with my friends * Chumbawamba - I get knocked down but I get up again, You're never gonna keep me down
    (so serious as a radical these days)
  • Elton John - like a Candle in the Wind * Los del Rio - A la tuhuelpa legria macarena Eeeh, macarena * Spice Girls - If you wanna be my lover, you gotta get with my friends * Chumbawamba - I get knocked down but I get up again, You're never gonna keep me down
    (so serious as a radical these days)
  • Elton John - like a Candle in the Wind * Los del Rio - A la tuhuelpa legria macarena Eeeh, macarena * Spice Girls - If you wanna be my lover, you gotta get with my friends * Chumbawamba - I get knocked down but I get up again, You're never gonna keep me down
    (so serious as a radical these days)
  • Elton John - like a Candle in the Wind * Los del Rio - A la tuhuelpa legria macarena Eeeh, macarena * Spice Girls - If you wanna be my lover, you gotta get with my friends * Chumbawamba - I get knocked down but I get up again, You're never gonna keep me down
    (so serious as a radical these days)
  • Elton John - like a Candle in the Wind * Los del Rio - A la tuhuelpa legria macarena Eeeh, macarena * Spice Girls - If you wanna be my lover, you gotta get with my friends * Chumbawamba - I get knocked down but I get up again, You're never gonna keep me down
    (so serious as a radical these days)
  • And this is me in 1997
    I was not singing at all at the time – I was doing my PhD…
  • with this man, my advisor Gregor Snelting.
  • we would usually find a cool formalism first, and then look at applications.
    Say: Girard’s linear logic
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • personal perspective: look at the code, pizza, clock, etc.
  • we had slicing, algorithmic debugging – that’s it!
  • Sometimes life gives you a blank sheet of paper, and it’s up to you to fill it.
  • In my case, it was: bugs bugs bugs
  • In my case, it was: bugs bugs bugs
  • In my case, it was: bugs bugs bugs
  • In my case, it was: bugs bugs bugs
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • First idea: bisection.
  • But: bisection doesn’t cut it!
  • But how do you get to this minimal difference? I tried quite a number of approaches, including genetic programming and search-based methods such as simulated annealing. Eventually, I had to come up with my own.
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • … plus a few slides on how it works, etc., plus more applications
  • 1998 talk
  • Pic of 1999 paper. Note that I submitted this 1 year after the first talk. That’s because I spent all this time simplifying it.
  • That’s because I spent one year making it as simple as possible, but no simpler. And this worked quite well.
  • to me, it brought a tenured position, and all the • riches and • privileges that • followed.
  • to me, it brought a tenured position, and all the • riches and • privileges that • followed.
  • to me, it brought a tenured position, and all the • riches and • privileges that • followed.
  • to me, it brought a tenured position, and all the • riches and • privileges that • followed.
  • a few “simple” ideas have obtained great traction
  • applications on input, program state
  • applications on input, program state
  • applications on input, program state
  • applications on input, program state
  • applications on input, program state
  • applications on input, program state
  • applications on input, program state
  • Today, delta debugging is a core part of git, mercurial, and other version control tools. (which is how I contributed to version control after all)
  • entry on delta debugging, s/w architecture, more
  • entry on delta debugging, s/w architecture, more
  • So, that’s what we have right now: tools tools tools
  • So, that’s what we have right now: tools tools tools
  • So, that’s what we have right now: tools tools tools
  • what do we still need to do?
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • Traditional approach: Defect localization – Produce a list of possible defect locations
    Our approach: Automatic fixes – Produce a set of valid fixes
  • We lack good benchmarks.
  • http://www.jjchandler.com/tombstone/download.php
  • We cannot tell bugs from features.
  • And by the way, this implies that interactive debuggers are the wrong tools.
  • Again, remember the long nights.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  • Keep a log: We’re systematic, and we’re explicit, again, all through our process.
  • Keep a log: We’re systematic, and we’re explicit, again, all through our process.
  • Keep a log: We’re systematic, and we’re explicit, again, all through our process.
  • Keep a log: We’re systematic, and we’re explicit, again, all through our process.
  • Keep a log: We’re systematic, and we’re explicit, again, all through our process.
  • Keep a log: We’re systematic, and we’re explicit, again, all through our process.
  • So maybe it’s not bugs bugs bugs
  • So maybe it’s not bugs bugs bugs
  • So maybe it’s not bugs bugs bugs
  • or tools tools tools
  • or tools tools tools
  • or tools tools tools
  • but developers developers developers (and their process - their debugging process). That’s what we need to study, and that’s what we need to fix.
  • but developers developers developers (and their process - their debugging process). That’s what we need to study, and that’s what we need to fix.
  • but developers developers developers (and their process - their debugging process). That’s what we need to study, and that’s what we need to fix.
  • let me state that again: their process - their debugging process, but also their development process. That’s what we need to study –
  • let me state that again: their process - their debugging process, but also their development process. That’s what we need to study –
  • let me state that again: their process - their debugging process, but also their development process. That’s what we need to study –
  • Debugging Debugging

    1. Debugging Debugging Andreas Zeller
    2. Debugging
    3. Debugging Tracking
    4. Debugging Tracking Simplifying
    5. Debugging Tracking Simplifying Automating
    6. Debugging Tracking Simplifying Automating Fixing
    7. Tracking Simplifying Debugging Automating Fixing
    8. Tracking Debugging
    9. 1997
    10. 1997
    11. 1997
    12. 1997
    13. 1997
    14. 1997
    15. 1997
    16. 1997
    17. 1997
    18. 1997
    19. 1997
    20. Gregor Snelting
    21. Vom Fachbereich f¨ r Mathematik und Informatik u der Technischen Universit¨ t Braunschweig a genehmigte Dissertation zur Erlangung des Grades eines Doktor-Ingenieurs (Dr.-Ing.) Andreas Zeller Configuration Management with Version Sets A Unified Software Versioning Model and its Applications 1. April 1997 1. Referent: Prof. Dr. Gregor Snelting 2. Referent: Prof. Dr. Walter F. Tichy Eingereicht am: 1. November 1996
    22. Bug Reports From: Brian Kahne <bkahne@ibmoto.com> To: DDD Bug Report Address <bug-ddd@gnu.org> Subject: Problem with DDD and GDB 4.17 When using DDD with GDB 4.16, the run command correctly uses any prior command-line arguments, or the value of "set args". However, when I switched to GDB 4.17, this no longer worked: If I entered a run command in the console window, the prior command-line options would be lost. [...]
    23. Henry Lieberman
    24. Simplifying Debugging
    25. Bug Reports From: Brian Kahne <bkahne@ibmoto.com> To: DDD Bug Report Address <bug-ddd@gnu.org> Subject: Problem with DDD and GDB 4.17 When using DDD with GDB 4.16, the run command correctly uses any prior command-line arguments, or the value of "set args". However, when I switched to GDB 4.17, this no longer worked: If I entered a run command in the console window, the prior command-line options would be lost. [...]
    26. Bisection
    27. Bisection
    28. Bisection ✔ Yesterday
    29. Bisection ✔ ✘ Yesterday Today
    30. Bisection ✔ ✘ Yesterday Today
    31. Bisection ✔ ✔ ✘ Yesterday Today
    32. Bisection ✔ ✔ ✘ Yesterday Today
    33. Bisection ✔ ✔ ✘ ✘ Yesterday Today
    34. Bisection ✔ ✔ ✘ ✘ Yesterday Today
    35. Bisection ✔ ✔ ✔✘ ✘ Yesterday Today
    36. Bisection ✔ ✔ ✔✘ ✘ Yesterday Today Failure Cause
    37. What was Changed $ diff -r gdb-4.16 gdb-4.17 diff -r gdb-4.16/COPYING gdb-4.17/COPYING 5c5 < 675 Mass Ave, Cambridge, MA 02139, USA --- > 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 282c282 < Appendix: How to Apply These Terms to Your New Programs --- > How to Apply These Terms to Your New Programs …and so on for 178,200 lines (8,721 locations)
    38. Causality Today Program works Program fails Yesterday Cause
    39. David Lewis 1941–2001
    40. Causality Today Program works Program fails Yesterday Cause
    41. Actual Causes “The” cause (actual cause) is a minimal difference Program works Program fails Actual cause
    42. Today
    43. Today ✘
    44. Today ✘ Yesterday
    45. Today ✘ ✔ Yesterday
    46. Today ✘ ✔ Yesterday
    47. Today ✘ ✔ ✔ Yesterday
    48. Today ✘ ✔ ✔ Yesterday
    49. Today ✘ ✔ ✔ Yesterday
    50. Today ✘ ✘ ✔ ✔ Yesterday
    51. Today ✘ ✘ ✔ ✔ Yesterday
    52. Today ✘ ✘ ✔ ✔ Yesterday
    53. Today ✘ ✘ ? ✔ ✔ Yesterday
    54. Today ✘ ✘ ✔ ✔ Yesterday
    55. Today ✘ ✘ ✔ ✔ Yesterday
    56. Today ✘ ✘ ✔ ✔ Yesterday
    57. Today ✘ ✘ ? ✔ ✔ Yesterday
    58. Today ✘ ✘ ✔ ✔ Yesterday
    59. Today ✘ ✘ ✔ ✔ Yesterday
    60. Today ✘ ✘ ✔ ✔ Yesterday
    61. Today ✘ ✘ ✘ ✔ ✔ Yesterday
    62. Today ✘ ✘ ✘ ✔ ✔ Yesterday
    63. Today ✘ ✘ ✘ … ✘ ✔ … ✔ ✔ Yesterday
    64. Today ✘ ✘ ✘ … ✘ ✔ … ✔ ✔ Yesterday
    65. Today ✘ ✘ ✘ … ✘ ✔ … Failure Cause ✔ ✔ Yesterday
    66. Today test(c✘ ) = ✘ ✘ ✘ ✘ … ∆ = c✘ c✔ ✘ ✔ … Failure Cause test(c✔ ✔✔ )= ✔ Yesterday
    67. test(c✘ ) = ✘ test(c✔ ) = ✔ ∆ = c✘ c✔
    68. test(c✘ ) = ✘ test(c✔ ) = ✔ ∆ = c✘ c✔ dd(c✔ , c✘ ) = dd (c✔ , c✘ , 2)
    69. test(c✘ ) = ✘ test(c✔ ) = ✔ ∆ = c✘ c✔ dd(c✔ , c✘ ) = dd (c✔ , c✘ , 2) dd (c✔ , c✘ , n) =  (c✔ , c✘ )   if |∆| = 1  dd (c ∆i , c , 2) if ∃i ∈ {1..n} · test(c✘ ∆i ) = ✔  ✘ ✘    dd (c , c ∪ ∆ , 2) if ∃i ∈ {1..n} · test(c✔ ∪ ∆i ) = ✘     ✔ ✔ i dd c✔ ∪ ∆i , c✘ , max(n − 1, 2) else if ∃i ∈ {1..n} · test(c✔ ∪ ∆i ) = ✔  dd c , c ∆ , max(n − 1, 2) else if ∃i ∈ {1..n} · test(c✘ ∆i ) = ✘     ✔ ✘ i  dd c , c , min(2n, |∆|)  else if n < |∆| (“increase granularity”) ✔ ✘    (c , c ) otherwise  ✔ ✘
    70. Delta Debugging dd(c✔ , c✘ ) = dd (c✔ , c✘ , 2) dd (c✔ , c✘ , n) =  (c✔ , c✘ )   if |∆| = 1  dd (c ∆i , c , 2) if ∃i ∈ {1..n} · test(c✘ ∆i ) = ✔  ✘ ✘    dd (c , c ∪ ∆ , 2) if ∃i ∈ {1..n} · test(c✔ ∪ ∆i ) = ✘     ✔ ✔ i dd c✔ ∪ ∆i , c✘ , max(n − 1, 2) else if ∃i ∈ {1..n} · test(c✔ ∪ ∆i ) = ✔  dd c , c ∆ , max(n − 1, 2) else if ∃i ∈ {1..n} · test(c✘ ∆i ) = ✘     ✔ ✘ i  dd c , c , min(2n, |∆|)  else if n < |∆| (“increase granularity”) ✔ ✘    (c , c ) otherwise  ✔ ✘
    71. def dd(c_pass, c_fail): n = 2 while 1: delta = listminus(c_fail, c_pass) deltas = split(delta, n); offset = 0; j = 0 while j < n: i = (j + offset) % n next_c_pass = listunion(c_pass, deltas[i]) next_c_fail = listminus(c_fail, deltas[i]) if test(next_c_fail) == FAIL and n == 2: c_fail = next_c_fail; n = 2; offset = 0; break elif test(next_c_fail) == PASS: c_pass = next_c_fail; n = 2; offset = 0; break elif test(next_c_pass) == FAIL: c_fail = next_c_pass; n = 2; offset = 0; break elif test(next_c_fail) == FAIL: c_fail = next_c_fail; n = max(n - 1, 2); offset = i; break elif test(next_c_pass) == PASS: c_pass = next_c_pass; n = max(n - 1, 2); offset = i; break else: j = j + 1 if j >= n: if n >= len(delta): return (delta, c_pass, c_fail) else: n = min(len(delta), n * 2)
    72. Isolating Changes
    73. Isolating Changes Delta Debugging Log 100000 GDB with ddmin algorithm 10000 ... with dd algorithm ... plus scope information Changes left 1000 100 10 1 0 50 100 150 200 250 300 Tests executed • Result after 98 tests (= 1 hour)
    74. The Failure Cause diff -r gdb-4.16/gdb/infcmd.c gdb-4.17/gdb/infcmd.c 1239c1278 < "Set arguments to give program being debugged when it is started.n --- > "Set argument list to give program being debugged when it is started.n • Documentation becomes GDB output • DDD expects Arguments, but GDB outputs Argument list
    75. Andreas Zeller · TU Braunschweig Gestern lief mein Programm. Heute nicht mehr. Warum? Fehlersuche mit Delta Debugging Andreas Zeller Mittagsseminar, TU Braunschweig, 16. M¨rz 1998 a 0
    76. Yesterday, my program worked. Today, it does not. Why? Andreas Zeller Universit¨ t Passau a Lehrstuhl f¨ r Software-Systeme u Innstraße 33, D-94032 Passau, Germany zeller@acm.org Abstract. Imagine some program and a number of changes. If none of these changes is applied (“yesterday”), the program works. If all changes are applied (“today”), the program does not work. Which change is responsible for the fail- ure? We present an efficient algorithm that determines the minimal set of failure- inducing changes. Our delta debugging prototype tracked down a single failure- inducing change from 178,000 changed GDB lines within a few hours. 1 A True Story The GDB people have done it again. The new release 4.17 of the GNU debugger [6]
    77. Automating Debugging
    78. VALUE="Mac System 7">Mac System 7<OPTION VALUE="Mac System 7.5">Mac System 7.5<OPTION VALUE="Mac System 7.6.1">Mac System 7.6.1<OPTION VALUE="Mac System 8.0">Mac System 8.0<OPTION VALUE="Mac System Delta Debugging 8.5">Mac System 8.5<OPTION VALUE="Mac System 8.6">Mac System 8.6<OPTION VALUE="Mac System 9.x">Mac System 9.x<OPTION VALUE="MacOS X">MacOS X<OPTION VALUE="Linux">Linux<OPTION VALUE="BSDI">BSDI<OPTION VALUE="FreeBSD">FreeBSD<OPTION VALUE="NetBSD">NetBSD<OPTION VALUE="OpenBSD">OpenBSD<OPTION VALUE="AIX">AIX<OPTION VALUE="BeOS">BeOS<OPTION VALUE="HP-UX">HP-UX<OPTION VALUE="IRIX">IRIX<OPTION VALUE="Neutrino">Neutrino<OPTION VALUE="OpenVMS">OpenVMS<OPTION VALUE="OS/2">OS/2<OPTION VALUE="OSF/ 1">OSF/1<OPTION VALUE="Solaris">Solaris<OPTION VALUE="SunOS">SunOS<OPTION VALUE="other">other</SELECT> </td> <td align=left valign=top> <SELECT NAME="priority" MULTIPLE SIZE=7> > <OPTION VALUE="--">--<OPTION VALUE="P1">P1<OPTION VALUE="P2">P2<OPTION VALUE="P3">P3<OPTION VALUE="P4">P4<OPTION VALUE="P5">P5</SELECT> </td> <td align=left valign=top <SELECT NAME="bug_severity" MULTIPLE SIZE=7> <OPTION VALUE="blocker">blocker<OPTION
    79. VALUE="Mac System 7">Mac System 7<OPTION VALUE="Mac System 7.5">Mac System 7.5<OPTION VALUE="Mac System 7.6.1">Mac System 7.6.1<OPTION VALUE="Mac System 8.0">Mac System 8.0<OPTION VALUE="Mac System 8.5">Mac System 8.5<OPTION VALUE="Mac System 8.6">Mac System 8.6<OPTION VALUE="Mac System 9.x">Mac System 9.x<OPTION VALUE="MacOS X">MacOS X<OPTION VALUE="Linux">Linux<OPTION VALUE="BSDI">BSDI<OPTION VALUE="FreeBSD">FreeBSD<OPTION VALUE="NetBSD">NetBSD<OPTION VALUE="OpenBSD">OpenBSD<OPTION VALUE="AIX">AIX<OPTION VALUE="BeOS">BeOS<OPTION VALUE="HP-UX">HP-UX<OPTION VALUE="IRIX">IRIX<OPTION VALUE="Neutrino">Neutrino<OPTION VALUE="OpenVMS">OpenVMS<OPTION VALUE="OS/2">OS/2<OPTION VALUE="OSF/ 1">OSF/1<OPTION VALUE="Solaris">Solaris<OPTION VALUE="SunOS">SunOS<OPTION VALUE="other">other</SELECT> </td> <td align=left valign=top> <SELECT NAME="priority" MULTIPLE SIZE=7> > <OPTION VALUE="--">--<OPTION VALUE="P1">P1<OPTION VALUE="P2">P2<OPTION VALUE="P3">P3<OPTION VALUE="P4">P4<OPTION VALUE="P5">P5</SELECT> </td> <td align=left valign=top <SELECT NAME="bug_severity" MULTIPLE SIZE=7> <OPTION VALUE="blocker">blocker<OPTION
    80. <SELECT>
    81. Failure Cause
    82. Ralf Hildebrandt Holger Cleve Martin Burger
    83. Statistical Debugging
    84. Jim Jones Ben Liblit
    85. Omniscient Debugging
    86. Bil Lewis
    87. Dynamic Slicing
    88. Andy Ko
    89. Bug Mining
    90. Tom Zimmermann Harald Gall Nachi Nagappan
    91. Automatic Fixing
    92. Westley Weimer
    93. WINNER OF JOLT PRODUCTIVITY AWARD ANDREAS ZELLER WHY PROGRAMS FAIL A GUIDE TO SYSTEMATIC DEBUGGING SECOND EDITION
    94. Fixing Debugging
    95. Rob DeLine Gina Venolia
    96. Contracts set_hour (h: INTEGER) is -- Set the hour from `h' require sane_h: 0 <= h and h <= 23 ensure hour_set: hour = h minute_unchanged: minutes = old minutes second_unchanged: seconds = old seconds
    97. Bertrand Meyer Gary Leavens
    98. Scienti c Method
    99. Scienti c Method Hypothesis
    100. Scienti c Method Code Hypothesis
    101. Scienti c Method Problem Report Code Hypothesis
    102. Scienti c Method Problem Report Code Hypothesis Run
    103. Scienti c Method Problem Report Code Hypothesis Run More Runs
    104. Scienti c Method Problem Report Code Hypothesis Prediction Run More Runs
    105. Scienti c Method Problem Report Code Hypothesis Prediction Experiment Run More Runs
    106. Scienti c Method Problem Report Code Observation Hypothesis Prediction Experiment + Conclusion Run More Runs
    107. Scienti c Method Problem Report Hypothesis is supported: re ne hypothesis Code Observation Hypothesis Prediction Experiment + Conclusion Run More Runs
    108. Scienti c Method Problem Report Hypothesis is supported: re ne hypothesis Code Observation Hypothesis Prediction Experiment + Conclusion Run Hypothesis is rejected: More Runs create new hypothesis
    109. Scienti c Method Problem Report Hypothesis is supported: re ne hypothesis Code Observation Hypothesis Prediction Experiment + Conclusion Run Hypothesis is rejected: More Runs create new hypothesis Diagnosis
    110. An Explicit Process
    111. An Explicit Process Hypothesis Prediction Experiment Observation Conclusion
    112. An Explicit Process Hypothesis The execution causes a[0] = 0 Prediction Experiment Observation Conclusion
    113. An Explicit Process Hypothesis The execution causes a[0] = 0 Prediction At Line 37, a[0] = 0 should hold. Experiment Observation Conclusion
    114. An Explicit Process Hypothesis The execution causes a[0] = 0 Prediction At Line 37, a[0] = 0 should hold. Experiment Observe a[0] at Line 37. Observation Conclusion
    115. An Explicit Process Hypothesis The execution causes a[0] = 0 Prediction At Line 37, a[0] = 0 should hold. Experiment Observe a[0] at Line 37. Observation a[0] = 0 holds as predicted. Conclusion
    116. An Explicit Process Hypothesis The execution causes a[0] = 0 Prediction At Line 37, a[0] = 0 should hold. Experiment Observe a[0] at Line 37. Observation a[0] = 0 holds as predicted. Conclusion Hypothesis is confirmed.
    117. Tracking Debugging Simplifying Debugging Automating Debugging Fixing Debugging

    ×