SlideShare a Scribd company logo
1 of 190
Debugging Debugging
      Andreas Zeller
Debugging
Debugging
Tracking
Debugging
Tracking
Simplifying
Debugging
Tracking
Simplifying
Automating
Debugging
Tracking
Simplifying
Automating
Fixing
Tracking
Simplifying
              Debugging
Automating
Fixing
Tracking Debugging
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
Gregor Snelting
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
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. [...]
Henry Lieberman
Simplifying Debugging
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. [...]
Bisection
Bisection
Bisection


   ✔
Yesterday
Bisection


   ✔                     ✘
Yesterday               Today
Bisection


   ✔                     ✘
Yesterday               Today
Bisection


   ✔            ✔        ✘
Yesterday               Today
Bisection


   ✔            ✔        ✘
Yesterday               Today
Bisection


   ✔            ✔       ✘    ✘
Yesterday                   Today
Bisection


   ✔            ✔       ✘    ✘
Yesterday                   Today
Bisection


   ✔            ✔ ✔✘     ✘
Yesterday               Today
Bisection


   ✔            ✔ ✔✘             ✘
Yesterday                      Today

                        Failure Cause
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)
Causality
Today
                        Program works




        Program fails                   Yesterday
                               Cause
David Lewis
   1941–2001
Causality
Today
                        Program works




        Program fails                   Yesterday
                               Cause
Actual Causes
“The” cause (actual cause) is a minimal difference


                  Program works



             Program fails


                                   Actual cause
Today
Today
        ✘
Today
            ✘




Yesterday
Today
            ✘




            ✔
Yesterday
Today
            ✘




            ✔
Yesterday
Today
            ✘


            ✔



            ✔
Yesterday
Today
            ✘




            ✔
            ✔
Yesterday
Today
            ✘




            ✔
            ✔
Yesterday
Today
            ✘


            ✘


            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘

            ?


            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘

            ?


            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘




            ✔
            ✔
Yesterday
Today
            ✘
            ✘

            ✘


            ✔
            ✔
Yesterday
Today
            ✘
            ✘
            ✘



            ✔
            ✔
Yesterday
Today
                ✘
                ✘
                ✘

            …
                ✘
                ✔
            …

                ✔
                ✔
Yesterday
Today
                ✘
                ✘
                ✘

            …
                ✘
                ✔
            …

                ✔
                ✔
Yesterday
Today
                       ✘
                       ✘
                       ✘

            …
                       ✘
                       ✔
            …

                Failure Cause
                      ✔
                      ✔
Yesterday
Today           test(c✘ ) = ✘
                           ✘
                           ✘
                           ✘

            …
                ∆ = c✘  c✔
                           ✘
                           ✔
            …

                Failure Cause
                test(c✔
                           ✔✔
                          )=
                           ✔
Yesterday
test(c✘ ) = ✘   test(c✔ ) = ✔   ∆ = c✘  c✔
test(c✘ ) = ✘          test(c✔ ) = ✔   ∆ = c✘  c✔



dd(c✔ , c✘ ) = dd (c✔ , c✘ , 2)
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

   ✔   ✘
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

   ✔   ✘
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)
Isolating Changes
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)
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
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
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]
Automating Debugging
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
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
<SELECT>
Failure Cause
Ralf Hildebrandt Holger Cleve   Martin Burger
Statistical Debugging
Jim Jones   Ben Liblit
Omniscient Debugging
Bil Lewis
Dynamic Slicing
Andy Ko
Bug Mining
Tom Zimmermann Harald Gall   Nachi Nagappan
Automatic Fixing
Westley Weimer
WINNER OF JOLT PRODUCTIVITY AWARD



          ANDREAS ZELLER

WHY PROGRAMS FAIL
A GUIDE TO SYSTEMATIC DEBUGGING
            SECOND EDITION
Fixing Debugging
Rob DeLine   Gina Venolia
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
Bertrand Meyer   Gary Leavens
Scienti c Method
Scienti c Method


Hypothesis
Scienti c Method

Code

  Hypothesis
Scienti c Method
  Problem Report

Code

  Hypothesis
Scienti c Method
  Problem Report

Code

  Hypothesis

Run
Scienti c Method
  Problem Report

Code

  Hypothesis

Run

  More Runs
Scienti c Method
  Problem Report

Code

  Hypothesis       Prediction

Run

  More Runs
Scienti c Method
  Problem Report

Code

  Hypothesis       Prediction   Experiment

Run

  More Runs
Scienti c Method
  Problem Report

Code

                                             Observation
  Hypothesis       Prediction   Experiment   + Conclusion

Run

  More Runs
Scienti c Method
  Problem Report          Hypothesis is supported:
                          re ne hypothesis
Code

                                                     Observation
  Hypothesis       Prediction    Experiment          + Conclusion

Run

  More Runs
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
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
An Explicit Process
An Explicit Process
Hypothesis
Prediction
Experiment
Observation
Conclusion
An Explicit Process
Hypothesis    The execution causes a[0] = 0


Prediction
Experiment
Observation
Conclusion
An Explicit Process
Hypothesis    The execution causes a[0] = 0


Prediction    At Line 37, a[0] = 0 should hold.


Experiment
Observation
Conclusion
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
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
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.
Tracking Debugging    Simplifying Debugging




Automating Debugging     Fixing Debugging

More Related Content

More from CISPA Helmholtz Center for Information Security

More from CISPA Helmholtz Center for Information Security (16)

Illustrated Code (ASE 2021)
Illustrated Code (ASE 2021)Illustrated Code (ASE 2021)
Illustrated Code (ASE 2021)
 
On Impact in Software Engineering Research (HU Berlin 2021)
On Impact in Software Engineering Research (HU Berlin 2021)On Impact in Software Engineering Research (HU Berlin 2021)
On Impact in Software Engineering Research (HU Berlin 2021)
 
On Impact in Software Engineering Research (Dagstuhl 2020)
On Impact in Software Engineering Research (Dagstuhl 2020)On Impact in Software Engineering Research (Dagstuhl 2020)
On Impact in Software Engineering Research (Dagstuhl 2020)
 
Fast and Effective Fuzz Testing (Facebook TAV 2019)
Fast and Effective Fuzz Testing (Facebook TAV 2019)Fast and Effective Fuzz Testing (Facebook TAV 2019)
Fast and Effective Fuzz Testing (Facebook TAV 2019)
 
Software-Tests automatisch erzeugen: Frische Ansätze für Forschung, Praxis un...
Software-Tests automatisch erzeugen: Frische Ansätze für Forschung, Praxis un...Software-Tests automatisch erzeugen: Frische Ansätze für Forschung, Praxis un...
Software-Tests automatisch erzeugen: Frische Ansätze für Forschung, Praxis un...
 
On impact in Software Engineering Research (ICSE 2018 New Faculty Symposium)
On impact in Software Engineering Research (ICSE 2018 New Faculty Symposium)On impact in Software Engineering Research (ICSE 2018 New Faculty Symposium)
On impact in Software Engineering Research (ICSE 2018 New Faculty Symposium)
 
On Impact in Software Engineering Research
On Impact in Software Engineering ResearchOn Impact in Software Engineering Research
On Impact in Software Engineering Research
 
Twelve tips on how to prepare an ERC grant proposal
Twelve tips on how to prepare an ERC grant proposalTwelve tips on how to prepare an ERC grant proposal
Twelve tips on how to prepare an ERC grant proposal
 
Getting your work funded
Getting your work fundedGetting your work funded
Getting your work funded
 
Learning from 6,000 projects mining specifications in the large
Learning from 6,000 projects   mining specifications in the largeLearning from 6,000 projects   mining specifications in the large
Learning from 6,000 projects mining specifications in the large
 
Seeding Bugs To Find Bugs
Seeding Bugs To Find BugsSeeding Bugs To Find Bugs
Seeding Bugs To Find Bugs
 
Mining Processes
Mining ProcessesMining Processes
Mining Processes
 
Mining Programs
Mining ProgramsMining Programs
Mining Programs
 
Getting your paper accepted (at ISSTA 2008)
Getting your paper accepted (at ISSTA 2008)Getting your paper accepted (at ISSTA 2008)
Getting your paper accepted (at ISSTA 2008)
 
Woher kommen Software-Fehler?
Woher kommen Software-Fehler?Woher kommen Software-Fehler?
Woher kommen Software-Fehler?
 
Do Bugs Reside in Complex Code?
Do Bugs Reside in Complex Code?Do Bugs Reside in Complex Code?
Do Bugs Reside in Complex Code?
 

Recently uploaded

New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 

Debugging Debugging with Delta Debugging

  • 1. Debugging Debugging Andreas Zeller
  • 7. Tracking Simplifying Debugging Automating Fixing
  • 10. 1997
  • 11. 1997
  • 12. 1997
  • 13. 1997
  • 14. 1997
  • 15. 1997
  • 16. 1997
  • 17. 1997
  • 18. 1997
  • 19. 1997
  • 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.
  • 23. 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. [...]
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 44. 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. [...]
  • 47. Bisection ✔ Yesterday
  • 48. Bisection ✔ ✘ Yesterday Today
  • 49. Bisection ✔ ✘ Yesterday Today
  • 50. Bisection ✔ ✔ ✘ Yesterday Today
  • 51. Bisection ✔ ✔ ✘ Yesterday Today
  • 52. Bisection ✔ ✔ ✘ ✘ Yesterday Today
  • 53. Bisection ✔ ✔ ✘ ✘ Yesterday Today
  • 54. Bisection ✔ ✔ ✔✘ ✘ Yesterday Today
  • 55. Bisection ✔ ✔ ✔✘ ✘ Yesterday Today Failure Cause
  • 56. 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)
  • 57. Causality Today Program works Program fails Yesterday Cause
  • 58. David Lewis 1941–2001
  • 59. Causality Today Program works Program fails Yesterday Cause
  • 60. Actual Causes “The” cause (actual cause) is a minimal difference Program works Program fails Actual cause
  • 61.
  • 62. Today
  • 63. Today
  • 64. Today ✘ Yesterday
  • 65. Today ✘ ✔ Yesterday
  • 66. Today ✘ ✔ Yesterday
  • 67. Today ✘ ✔ ✔ Yesterday
  • 68. Today ✘ ✔ ✔ Yesterday
  • 69. Today ✘ ✔ ✔ Yesterday
  • 70. Today ✘ ✘ ✔ ✔ Yesterday
  • 71. Today ✘ ✘ ✔ ✔ Yesterday
  • 72. Today ✘ ✘ ✔ ✔ Yesterday
  • 73. Today ✘ ✘ ? ✔ ✔ Yesterday
  • 74. Today ✘ ✘ ✔ ✔ Yesterday
  • 75. Today ✘ ✘ ✔ ✔ Yesterday
  • 76. Today ✘ ✘ ✔ ✔ Yesterday
  • 77. Today ✘ ✘ ? ✔ ✔ Yesterday
  • 78. Today ✘ ✘ ✔ ✔ Yesterday
  • 79. Today ✘ ✘ ✔ ✔ Yesterday
  • 80. Today ✘ ✘ ✔ ✔ Yesterday
  • 81. Today ✘ ✘ ✘ ✔ ✔ Yesterday
  • 82. Today ✘ ✘ ✘ ✔ ✔ Yesterday
  • 83. Today ✘ ✘ ✘ … ✘ ✔ … ✔ ✔ Yesterday
  • 84. Today ✘ ✘ ✘ … ✘ ✔ … ✔ ✔ Yesterday
  • 85. Today ✘ ✘ ✘ … ✘ ✔ … Failure Cause ✔ ✔ Yesterday
  • 86. Today test(c✘ ) = ✘ ✘ ✘ ✘ … ∆ = c✘ c✔ ✘ ✔ … Failure Cause test(c✔ ✔✔ )= ✔ Yesterday
  • 87. test(c✘ ) = ✘ test(c✔ ) = ✔ ∆ = c✘ c✔
  • 88. test(c✘ ) = ✘ test(c✔ ) = ✔ ∆ = c✘ c✔ dd(c✔ , c✘ ) = dd (c✔ , c✘ , 2)
  • 89. 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  ✔ ✘
  • 90. 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  ✔ ✘
  • 91. 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)
  • 93. 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)
  • 94. 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
  • 95. 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
  • 96. 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]
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 103. 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
  • 104. 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
  • 106.
  • 107.
  • 109.
  • 110.
  • 111. Ralf Hildebrandt Holger Cleve Martin Burger
  • 112.
  • 113.
  • 115. Jim Jones Ben Liblit
  • 121. Tom Zimmermann Harald Gall Nachi Nagappan
  • 124. WINNER OF JOLT PRODUCTIVITY AWARD ANDREAS ZELLER WHY PROGRAMS FAIL A GUIDE TO SYSTEMATIC DEBUGGING SECOND EDITION
  • 125.
  • 126.
  • 127.
  • 128.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143. Rob DeLine Gina Venolia
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149. 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
  • 150. Bertrand Meyer Gary Leavens
  • 151.
  • 152.
  • 153.
  • 156. Scienti c Method Code Hypothesis
  • 157. Scienti c Method Problem Report Code Hypothesis
  • 158. Scienti c Method Problem Report Code Hypothesis Run
  • 159. Scienti c Method Problem Report Code Hypothesis Run More Runs
  • 160. Scienti c Method Problem Report Code Hypothesis Prediction Run More Runs
  • 161. Scienti c Method Problem Report Code Hypothesis Prediction Experiment Run More Runs
  • 162. Scienti c Method Problem Report Code Observation Hypothesis Prediction Experiment + Conclusion Run More Runs
  • 163. Scienti c Method Problem Report Hypothesis is supported: re ne hypothesis Code Observation Hypothesis Prediction Experiment + Conclusion Run More Runs
  • 164. 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
  • 165. 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
  • 168. An Explicit Process Hypothesis The execution causes a[0] = 0 Prediction Experiment Observation Conclusion
  • 169. An Explicit Process Hypothesis The execution causes a[0] = 0 Prediction At Line 37, a[0] = 0 should hold. Experiment Observation Conclusion
  • 170. 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
  • 171. 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
  • 172. 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.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190. Tracking Debugging Simplifying Debugging Automating Debugging Fixing Debugging

Editor's Notes

  1. 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&apos;re never gonna keep me down (so serious as a radical these days)
  2. 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&apos;re never gonna keep me down (so serious as a radical these days)
  3. 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&apos;re never gonna keep me down (so serious as a radical these days)
  4. 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&apos;re never gonna keep me down (so serious as a radical these days)
  5. 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&apos;re never gonna keep me down (so serious as a radical these days)
  6. And this is me in 1997 I was not singing at all at the time &amp;#x2013;&amp;#xA0;I was doing my PhD&amp;#x2026;
  7. with this man, my advisor Gregor Snelting.
  8. we would usually find a cool formalism first, and then look at applications. Say: Girard&amp;#x2019;s linear logic
  9. personal perspective: look at the code, pizza, clock, etc.
  10. personal perspective: look at the code, pizza, clock, etc.
  11. personal perspective: look at the code, pizza, clock, etc.
  12. personal perspective: look at the code, pizza, clock, etc.
  13. personal perspective: look at the code, pizza, clock, etc.
  14. personal perspective: look at the code, pizza, clock, etc.
  15. personal perspective: look at the code, pizza, clock, etc.
  16. personal perspective: look at the code, pizza, clock, etc.
  17. personal perspective: look at the code, pizza, clock, etc.
  18. personal perspective: look at the code, pizza, clock, etc.
  19. personal perspective: look at the code, pizza, clock, etc.
  20. personal perspective: look at the code, pizza, clock, etc.
  21. personal perspective: look at the code, pizza, clock, etc.
  22. personal perspective: look at the code, pizza, clock, etc.
  23. personal perspective: look at the code, pizza, clock, etc.
  24. personal perspective: look at the code, pizza, clock, etc.
  25. personal perspective: look at the code, pizza, clock, etc.
  26. personal perspective: look at the code, pizza, clock, etc.
  27. personal perspective: look at the code, pizza, clock, etc.
  28. personal perspective: look at the code, pizza, clock, etc.
  29. we had slicing, algorithmic debugging &amp;#x2013;&amp;#xA0;that&amp;#x2019;s it!
  30. Sometimes life gives you a blank sheet of paper, and it&amp;#x2019;s up to you to fill it.
  31. In my case, it was: bugs bugs bugs
  32. In my case, it was: bugs bugs bugs
  33. In my case, it was: bugs bugs bugs
  34. In my case, it was: bugs bugs bugs
  35. First idea: bisection.
  36. First idea: bisection.
  37. First idea: bisection.
  38. First idea: bisection.
  39. First idea: bisection.
  40. First idea: bisection.
  41. First idea: bisection.
  42. First idea: bisection.
  43. First idea: bisection.
  44. First idea: bisection.
  45. First idea: bisection.
  46. First idea: bisection.
  47. First idea: bisection.
  48. First idea: bisection.
  49. First idea: bisection.
  50. First idea: bisection.
  51. But: bisection doesn&amp;#x2019;t cut it!
  52. 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.
  53. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  54. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  55. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  56. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  57. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  58. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  59. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  60. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  61. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  62. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  63. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  64. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  65. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  66. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  67. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  68. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  69. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  70. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  71. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  72. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  73. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  74. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  75. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  76. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  77. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  78. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  79. &amp;#x2026; plus a few slides on how it works, etc., plus more applications
  80. 1998 talk
  81. Pic of 1999 paper. Note that I submitted this 1 year after the first talk. That&amp;#x2019;s because I spent all this time simplifying it.
  82. That&amp;#x2019;s because I spent one year making it as simple as possible, but no simpler. And this worked quite well.
  83. to me, it brought a tenured position, and all the &amp;#x2022; riches and &amp;#x2022; privileges that &amp;#x2022;&amp;#xA0;followed.
  84. to me, it brought a tenured position, and all the &amp;#x2022; riches and &amp;#x2022; privileges that &amp;#x2022;&amp;#xA0;followed.
  85. to me, it brought a tenured position, and all the &amp;#x2022; riches and &amp;#x2022; privileges that &amp;#x2022;&amp;#xA0;followed.
  86. to me, it brought a tenured position, and all the &amp;#x2022; riches and &amp;#x2022; privileges that &amp;#x2022;&amp;#xA0;followed.
  87. a few &amp;#x201C;simple&amp;#x201D; ideas have obtained great traction
  88. applications on input, program state
  89. applications on input, program state
  90. applications on input, program state
  91. applications on input, program state
  92. applications on input, program state
  93. applications on input, program state
  94. applications on input, program state
  95. 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)
  96. entry on delta debugging, s/w architecture, more
  97. entry on delta debugging, s/w architecture, more
  98. So, that&amp;#x2019;s what we have right now: tools tools tools
  99. So, that&amp;#x2019;s what we have right now: tools tools tools
  100. So, that&amp;#x2019;s what we have right now: tools tools tools
  101. what do we still need to do?
  102. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  103. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  104. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  105. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  106. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  107. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  108. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  109. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  110. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  111. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  112. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  113. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  114. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  115. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  116. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  117. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  118. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  119. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  120. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  121. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  122. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  123. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  124. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  125. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  126. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  127. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  128. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  129. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  130. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  131. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  132. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  133. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  134. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  135. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  136. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  137. Traditional approach: Defect localization &amp;#x2013; Produce a list of possible defect locations Our approach: Automatic fixes &amp;#x2013; Produce a set of valid fixes
  138. We lack good benchmarks.
  139. http://www.jjchandler.com/tombstone/download.php
  140. We cannot tell bugs from features.
  141. And by the way, this implies that interactive debuggers are the wrong tools.
  142. Again, remember the long nights.
  143. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  144. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  145. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  146. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  147. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  148. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  149. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  150. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  151. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  152. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  153. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  154. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  155. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  156. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  157. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  158. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  159. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  160. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  161. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  162. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  163. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  164. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  165. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  166. There is a systematic way to do this. Delta debugging is its implementation; but you can (and you should!) do this manually, too.
  167. Keep a log: We&amp;#x2019;re systematic, and we&amp;#x2019;re explicit, again, all through our process.
  168. Keep a log: We&amp;#x2019;re systematic, and we&amp;#x2019;re explicit, again, all through our process.
  169. Keep a log: We&amp;#x2019;re systematic, and we&amp;#x2019;re explicit, again, all through our process.
  170. Keep a log: We&amp;#x2019;re systematic, and we&amp;#x2019;re explicit, again, all through our process.
  171. Keep a log: We&amp;#x2019;re systematic, and we&amp;#x2019;re explicit, again, all through our process.
  172. Keep a log: We&amp;#x2019;re systematic, and we&amp;#x2019;re explicit, again, all through our process.
  173. So maybe it&amp;#x2019;s not bugs bugs bugs
  174. So maybe it&amp;#x2019;s not bugs bugs bugs
  175. So maybe it&amp;#x2019;s not bugs bugs bugs
  176. or tools tools tools
  177. or tools tools tools
  178. or tools tools tools
  179. but developers developers developers (and their process - their debugging process). That&amp;#x2019;s what we need to study, and that&amp;#x2019;s what we need to fix.
  180. but developers developers developers (and their process - their debugging process). That&amp;#x2019;s what we need to study, and that&amp;#x2019;s what we need to fix.
  181. but developers developers developers (and their process - their debugging process). That&amp;#x2019;s what we need to study, and that&amp;#x2019;s what we need to fix.
  182. let me state that again: their process - their debugging process, but also their development process. That&amp;#x2019;s what we need to study &amp;#x2013;
  183. let me state that again: their process - their debugging process, but also their development process. That&amp;#x2019;s what we need to study &amp;#x2013;
  184. let me state that again: their process - their debugging process, but also their development process. That&amp;#x2019;s what we need to study &amp;#x2013;