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

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
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
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
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
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 

Recently uploaded (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
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
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
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
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 

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;