SlideShare a Scribd company logo
1 of 23
Download to read offline
Flow-Centric,
Back-In-Time
Debugging

Adrian Lienhard, Julien Fierz
and Oscar Nierstrasz
Software Composition Group
University of Bern, Switzerland
Debugger call stack
                                  class Account {
                                    Money balance;
                                    void deposit(Money amount) {
NullPointerException >>               this.balance += money;
                                    }
                                    ...
                                  }


                     ..................
Debugger call stack
                          class Account {
                            Money balance;
                            void deposit(Money amount) {
NullPointerException >>       this.balance += money;
                            }
                            ...
                          }

                          class Company {
                            void pay(Money money, Person person) {
                              person.account().deposit(money);
                            }
                          }
                     ...




                                                    where does the
                                                    account object
                                                    come from?
Debugger call stack
                          class Account {
                            Money balance;
                            void deposit(Money amount) {
NullPointerException >>       this.balance += money;
                            }
                            ...
                          }

                          class Company {
                            void pay(Money money, Person person) {
                              person.account().deposit(money);
                            }
                          }
                     ...




                                                    where does the
                                          return    account object
                                                    come from?
Debugger call stack
                          class Account {
                            Money balance;
                            void deposit(Money amount) {
NullPointerException >>       this.balance += money;
                            }
                            ...
                          }

                          class Company {
                            void pay(Money money, Person person) {
                              person.account().deposit(money);
                            }
                          }
                     ...




                                                    where does the
                     field read            return    account object
                                                    come from?
Debugger call stack
                                           class Account {
                                             Money balance;
                                             void deposit(Money amount) {
                                               this.balance += money;
                                             }
                                             ...
                                           }

class Person {                             class Company {
  void createAccount(Bank bank) {            void pay(Money money, Person perso
    this.account = bank.openAccount();         person.account().deposit(money);
  }                                          }
}                                          }




                                         ...
                                                                     where doe
                return    field write     field read         return    account o
                                                                     come from
class Acc
                                                                           Money b
                                                                           void de
                                                                             this.
                                                                           }
                                                                           ...
                                                                         }

class Bank {                  class Person {                             class Com
  Account openAccount() {       void createAccount(Bank bank) {            void pa
    return new Account();         this.account = bank.openAccount();         perso
  }                             }                                          }
}                             }                                          }




                                                                       ...
                     allocation               return    field write     field read
In 50% of the cases the execution stack contains
essentially no information about the bug’s cause.
                                         [Liblit PLDI’05]

                             current call stack




              lost method
              executions
With Back-in-time debuggers,
we have all data we need at hand




      complete execution history
With Back-in-time debuggers,
        we have all data we need at hand




Large amount of data:
   programs slow down and run out of memory
With Back-in-time debuggers,
        we have all data we need at hand




Large amount of data:                              h ier et
                                              Popt LA'07
                                                            al.
                                                    S
                                               OOP
   programs slow down and run out of memory        ard e
                                                          tal.
                                              Lienh P'08
                                                    O
                                               ECO
With Back-in-time debuggers,
        we have all data we need at hand




Large amount of data:
   programs slow down and run out of memory
   developer may not find the root cause
Developer: “where did this object come from?”




                                 ?


 Problem: how far back in time do we need to step?
Flow-centric debugging




Object flow (red) mapped to execution trace
                                             14
Flow-centric debugging




Object flow (red) mapped to execution trace
                                             15
The Compass Debugger

    Debugging VM tracks
    object flow

    Debugger frontend makes
    object flow accessible




                              16
Frontend

        1          8




    2          3   9


    4          5




6              7


                       17
Execution trace visualization


                   selected method


                                     stack
                                     depth




          method
          start time




                                             18
Navigating Execution Traces




                     execution trace




     call stack

                                       19
Object flow




                  object flow of a
                  selected value       method trace




execution stack             object flow list

                                                      20
short demo...




                21
Compass Frontend




Compass Model       Dynamic model                   Static model

                       Activation
                                                     ASTNode
                            Alias


Object Flow VM
                    0..1      *
                               Activation
  program          caller
                                    1 context
 execution
 recording
                     0..1    *       *
                                                *       1
                                    Alias                     Object
                   origin                           value
                                                                       22
Conclusion
Conventional back-in-time debuggers adopt
traditional stack-oriented views

Flow-centric views improve the effectiveness
of debugging

Future work: concurrency bugs

Prototype:
http://scg.iam.unibe.ch/research/objectflow
                                               23

More Related Content

Viewers also liked

Chapter 5
Chapter 5Chapter 5
Chapter 5
dphil002
 
Thehub Milan Startup Weekend
Thehub   Milan Startup WeekendThehub   Milan Startup Weekend
Thehub Milan Startup Weekend
The Hub Milan
 
Chapter 12
Chapter 12Chapter 12
Chapter 12
dphil002
 
201006 its tutorial
201006 its tutorial201006 its tutorial
201006 its tutorial
Javier Gonzalez-Sanchez
 
RCMSL Phenomenal July 9, 2009
RCMSL Phenomenal July 9, 2009RCMSL Phenomenal July 9, 2009
RCMSL Phenomenal July 9, 2009
etalcomendras
 

Viewers also liked (20)

Farma
FarmaFarma
Farma
 
Chapter 5
Chapter 5Chapter 5
Chapter 5
 
201001 Face-Based Emotion Recognition
201001 Face-Based Emotion Recognition201001 Face-Based Emotion Recognition
201001 Face-Based Emotion Recognition
 
Angeio 1 2010
Angeio 1 2010Angeio 1 2010
Angeio 1 2010
 
201505 CSE340 Lecture 04
201505 CSE340 Lecture 04201505 CSE340 Lecture 04
201505 CSE340 Lecture 04
 
201107 ICALT
201107 ICALT201107 ICALT
201107 ICALT
 
Login Seminars Blackboard Directions 2009
Login Seminars Blackboard Directions 2009Login Seminars Blackboard Directions 2009
Login Seminars Blackboard Directions 2009
 
Amigos de verdad
Amigos de verdadAmigos de verdad
Amigos de verdad
 
Micazxpl - Intelligent Sensors Network project report
Micazxpl - Intelligent Sensors Network project reportMicazxpl - Intelligent Sensors Network project report
Micazxpl - Intelligent Sensors Network project report
 
201506 CSE340 Lecture 20
201506 CSE340 Lecture 20 201506 CSE340 Lecture 20
201506 CSE340 Lecture 20
 
Thehub bocconi law
Thehub   bocconi lawThehub   bocconi law
Thehub bocconi law
 
Thehub Milan Startup Weekend
Thehub   Milan Startup WeekendThehub   Milan Startup Weekend
Thehub Milan Startup Weekend
 
201106 WICSA
201106 WICSA201106 WICSA
201106 WICSA
 
Medi Contention
Medi ContentionMedi Contention
Medi Contention
 
Heirloom Travel: Wine Country - Wineries
Heirloom Travel: Wine Country - WineriesHeirloom Travel: Wine Country - Wineries
Heirloom Travel: Wine Country - Wineries
 
Chapter 12
Chapter 12Chapter 12
Chapter 12
 
201006 its tutorial
201006 its tutorial201006 its tutorial
201006 its tutorial
 
Monaco 020909
Monaco 020909Monaco 020909
Monaco 020909
 
Pachin
PachinPachin
Pachin
 
RCMSL Phenomenal July 9, 2009
RCMSL Phenomenal July 9, 2009RCMSL Phenomenal July 9, 2009
RCMSL Phenomenal July 9, 2009
 

Similar to Flow-Centric, Back-In-Time Debugging

Inheritance
InheritanceInheritance
Inheritance
FALLEE31188
 
The java class Account that simultes the Account class.pdf
   The java class Account that simultes  the Account class.pdf   The java class Account that simultes  the Account class.pdf
The java class Account that simultes the Account class.pdf
akshay1213
 
OOP: Classes and Objects
OOP: Classes and ObjectsOOP: Classes and Objects
OOP: Classes and Objects
Atit Patumvan
 
You are not setting any values for those variables(name, ID, interes.pdf
You are not setting any values for those variables(name, ID, interes.pdfYou are not setting any values for those variables(name, ID, interes.pdf
You are not setting any values for those variables(name, ID, interes.pdf
deepakangel
 
Account.h Definition of Account class. #ifndef ACCOUNT_H #d.pdf
Account.h  Definition of Account class. #ifndef ACCOUNT_H #d.pdfAccount.h  Definition of Account class. #ifndef ACCOUNT_H #d.pdf
Account.h Definition of Account class. #ifndef ACCOUNT_H #d.pdf
anujmkt
 
I need help creating a basic and simple Java program. Here is the ex.pdf
I need help creating a basic and simple Java program. Here is the ex.pdfI need help creating a basic and simple Java program. Here is the ex.pdf
I need help creating a basic and simple Java program. Here is the ex.pdf
rajeshjangid1865
 
public class InsufficientFundsException extends Exception{Insuffic.pdf
public class InsufficientFundsException extends Exception{Insuffic.pdfpublic class InsufficientFundsException extends Exception{Insuffic.pdf
public class InsufficientFundsException extends Exception{Insuffic.pdf
ankitcom
 
Please distinguish between the .h and .cpp file, create a fully work.pdf
Please distinguish between the .h and .cpp file, create a fully work.pdfPlease distinguish between the .h and .cpp file, create a fully work.pdf
Please distinguish between the .h and .cpp file, create a fully work.pdf
neerajsachdeva33
 
Barcelona Developers Conference 2011
Barcelona Developers Conference 2011Barcelona Developers Conference 2011
Barcelona Developers Conference 2011
PayPal
 
Bank Program in JavaBelow is my code(havent finished, but it be .pdf
Bank Program in JavaBelow is my code(havent finished, but it be .pdfBank Program in JavaBelow is my code(havent finished, but it be .pdf
Bank Program in JavaBelow is my code(havent finished, but it be .pdf
izabellejaeden956
 
Banks offer various types of accounts, such as savings, checking, cer.pdf
Banks offer various types of accounts, such as savings, checking, cer.pdfBanks offer various types of accounts, such as savings, checking, cer.pdf
Banks offer various types of accounts, such as savings, checking, cer.pdf
rajeshjain2109
 
Tmpj3 01 201181102muhammad_tohir
Tmpj3 01 201181102muhammad_tohirTmpj3 01 201181102muhammad_tohir
Tmpj3 01 201181102muhammad_tohir
pencari buku
 
Automatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsAutomatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method Declarations
ICSM 2010
 
Can you fix the problem with the following code #include -iostream- #.pdf
Can you fix the problem with the following code  #include -iostream- #.pdfCan you fix the problem with the following code  #include -iostream- #.pdf
Can you fix the problem with the following code #include -iostream- #.pdf
vinaythemodel
 

Similar to Flow-Centric, Back-In-Time Debugging (20)

Inheritance
InheritanceInheritance
Inheritance
 
The java class Account that simultes the Account class.pdf
   The java class Account that simultes  the Account class.pdf   The java class Account that simultes  the Account class.pdf
The java class Account that simultes the Account class.pdf
 
OOP: Classes and Objects
OOP: Classes and ObjectsOOP: Classes and Objects
OOP: Classes and Objects
 
You are not setting any values for those variables(name, ID, interes.pdf
You are not setting any values for those variables(name, ID, interes.pdfYou are not setting any values for those variables(name, ID, interes.pdf
You are not setting any values for those variables(name, ID, interes.pdf
 
Clojure workshop
Clojure workshopClojure workshop
Clojure workshop
 
Account.h Definition of Account class. #ifndef ACCOUNT_H #d.pdf
Account.h  Definition of Account class. #ifndef ACCOUNT_H #d.pdfAccount.h  Definition of Account class. #ifndef ACCOUNT_H #d.pdf
Account.h Definition of Account class. #ifndef ACCOUNT_H #d.pdf
 
I need help creating a basic and simple Java program. Here is the ex.pdf
I need help creating a basic and simple Java program. Here is the ex.pdfI need help creating a basic and simple Java program. Here is the ex.pdf
I need help creating a basic and simple Java program. Here is the ex.pdf
 
public class InsufficientFundsException extends Exception{Insuffic.pdf
public class InsufficientFundsException extends Exception{Insuffic.pdfpublic class InsufficientFundsException extends Exception{Insuffic.pdf
public class InsufficientFundsException extends Exception{Insuffic.pdf
 
The account problem in Java and Clojure
The account problem in Java and ClojureThe account problem in Java and Clojure
The account problem in Java and Clojure
 
Please distinguish between the .h and .cpp file, create a fully work.pdf
Please distinguish between the .h and .cpp file, create a fully work.pdfPlease distinguish between the .h and .cpp file, create a fully work.pdf
Please distinguish between the .h and .cpp file, create a fully work.pdf
 
Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)
 
Barcelona Developers Conference 2011
Barcelona Developers Conference 2011Barcelona Developers Conference 2011
Barcelona Developers Conference 2011
 
Bank Program in JavaBelow is my code(havent finished, but it be .pdf
Bank Program in JavaBelow is my code(havent finished, but it be .pdfBank Program in JavaBelow is my code(havent finished, but it be .pdf
Bank Program in JavaBelow is my code(havent finished, but it be .pdf
 
Banks offer various types of accounts, such as savings, checking, cer.pdf
Banks offer various types of accounts, such as savings, checking, cer.pdfBanks offer various types of accounts, such as savings, checking, cer.pdf
Banks offer various types of accounts, such as savings, checking, cer.pdf
 
Tmpj3 01 201181102muhammad_tohir
Tmpj3 01 201181102muhammad_tohirTmpj3 01 201181102muhammad_tohir
Tmpj3 01 201181102muhammad_tohir
 
Automatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsAutomatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method Declarations
 
Spring Transaction
Spring TransactionSpring Transaction
Spring Transaction
 
Can you fix the problem with the following code #include -iostream- #.pdf
Can you fix the problem with the following code  #include -iostream- #.pdfCan you fix the problem with the following code  #include -iostream- #.pdf
Can you fix the problem with the following code #include -iostream- #.pdf
 
Actor Model
Actor ModelActor Model
Actor Model
 
Bank account in java
Bank account in javaBank account in java
Bank account in java
 

More from lienhard (9)

Chicken
ChickenChicken
Chicken
 
Prototype-based Programming with JavaScript
Prototype-based Programming with JavaScriptPrototype-based Programming with JavaScript
Prototype-based Programming with JavaScript
 
Virtual Machines Lecture
Virtual Machines LectureVirtual Machines Lecture
Virtual Machines Lecture
 
OORPT Dynamic Analysis
OORPT Dynamic AnalysisOORPT Dynamic Analysis
OORPT Dynamic Analysis
 
Dynamic Object Flow Analysis (PhD Defense)
Dynamic Object Flow Analysis (PhD Defense)Dynamic Object Flow Analysis (PhD Defense)
Dynamic Object Flow Analysis (PhD Defense)
 
Rapid Prototyping Of Visualizations Using Mondrian
Rapid Prototyping Of Visualizations Using MondrianRapid Prototyping Of Visualizations Using Mondrian
Rapid Prototyping Of Visualizations Using Mondrian
 
Tracking Objects To Detect Feature Dependencies
Tracking Objects To Detect Feature DependenciesTracking Objects To Detect Feature Dependencies
Tracking Objects To Detect Feature Dependencies
 
Test Blueprints
Test BlueprintsTest Blueprints
Test Blueprints
 
Identifying Traits with Formal Concept Analysis
Identifying Traits with Formal Concept AnalysisIdentifying Traits with Formal Concept Analysis
Identifying Traits with Formal Concept Analysis
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

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
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 

Flow-Centric, Back-In-Time Debugging

  • 1. Flow-Centric, Back-In-Time Debugging Adrian Lienhard, Julien Fierz and Oscar Nierstrasz Software Composition Group University of Bern, Switzerland
  • 2. Debugger call stack class Account { Money balance; void deposit(Money amount) { NullPointerException >> this.balance += money; } ... } ..................
  • 3. Debugger call stack class Account { Money balance; void deposit(Money amount) { NullPointerException >> this.balance += money; } ... } class Company { void pay(Money money, Person person) { person.account().deposit(money); } } ... where does the account object come from?
  • 4. Debugger call stack class Account { Money balance; void deposit(Money amount) { NullPointerException >> this.balance += money; } ... } class Company { void pay(Money money, Person person) { person.account().deposit(money); } } ... where does the return account object come from?
  • 5. Debugger call stack class Account { Money balance; void deposit(Money amount) { NullPointerException >> this.balance += money; } ... } class Company { void pay(Money money, Person person) { person.account().deposit(money); } } ... where does the field read return account object come from?
  • 6. Debugger call stack class Account { Money balance; void deposit(Money amount) { this.balance += money; } ... } class Person { class Company { void createAccount(Bank bank) { void pay(Money money, Person perso this.account = bank.openAccount(); person.account().deposit(money); } } } } ... where doe return field write field read return account o come from
  • 7. class Acc Money b void de this. } ... } class Bank { class Person { class Com Account openAccount() { void createAccount(Bank bank) { void pa return new Account(); this.account = bank.openAccount(); perso } } } } } } ... allocation return field write field read
  • 8. In 50% of the cases the execution stack contains essentially no information about the bug’s cause. [Liblit PLDI’05] current call stack lost method executions
  • 9. With Back-in-time debuggers, we have all data we need at hand complete execution history
  • 10. With Back-in-time debuggers, we have all data we need at hand Large amount of data: programs slow down and run out of memory
  • 11. With Back-in-time debuggers, we have all data we need at hand Large amount of data: h ier et Popt LA'07 al. S OOP programs slow down and run out of memory ard e tal. Lienh P'08 O ECO
  • 12. With Back-in-time debuggers, we have all data we need at hand Large amount of data: programs slow down and run out of memory developer may not find the root cause
  • 13. Developer: “where did this object come from?” ? Problem: how far back in time do we need to step?
  • 14. Flow-centric debugging Object flow (red) mapped to execution trace 14
  • 15. Flow-centric debugging Object flow (red) mapped to execution trace 15
  • 16. The Compass Debugger Debugging VM tracks object flow Debugger frontend makes object flow accessible 16
  • 17. Frontend 1 8 2 3 9 4 5 6 7 17
  • 18. Execution trace visualization selected method stack depth method start time 18
  • 19. Navigating Execution Traces execution trace call stack 19
  • 20. Object flow object flow of a selected value method trace execution stack object flow list 20
  • 22. Compass Frontend Compass Model Dynamic model Static model Activation ASTNode Alias Object Flow VM 0..1 * Activation program caller 1 context execution recording 0..1 * * * 1 Alias Object origin value 22
  • 23. Conclusion Conventional back-in-time debuggers adopt traditional stack-oriented views Flow-centric views improve the effectiveness of debugging Future work: concurrency bugs Prototype: http://scg.iam.unibe.ch/research/objectflow 23