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

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Recently uploaded (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

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;