Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Object-Centric Debugging: a preview

290 views

Published on

Object-Centric Debugging: a preview
Steven Costiou, PharoDays 2019

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Object-Centric Debugging: a preview

  1. 1. Object-Centric Debugging: a preview Steven Costiou steven.costiou@inria.fr RMoD Inria Lille - Nord Europe 2019
  2. 2. 2
  3. 3. Part I Object-Centric Debugging 3
  4. 4. Demo 4
  5. 5. What is object-centric debugging? 5
  6. 6. Object-centric debugging • Debugging operations at the level of objects • Only target objects are affected • Examples: • A breakpoint active for one object only • A method available for one object only 6
  7. 7. Why object-centric debugging? 7
  8. 8. Why Object-centric debugging? • Debugging one object among many: • Collections (Hinkle, Jones, Johnson, 1993) • Events • Graphical objects
 
 
 8
  9. 9. Object-Centric Features (preview) 9
  10. 10. Object-centric breakpoints • Break when a message is received • haltOnCall => on every method call • haltOnCall: #selector => for given selector only • haltOnNextCall => on next method call • haltOnceOnCall: #selector => only once for given selector • haltOnCallWhen: condition => if condition is met
 
 10
  11. 11. Object-centric breakpoints • Break on state access • haltOnWriteTo: #instVarName => when instVarName is written • haltOnRead: #instVarName => when instVarName is read • haltOnWrite => when any instance variable is written • haltOnRead => when any instance variable is read
 
 
 
 11
  12. 12. Object-centric behavior • Object-centric methods • compile: sourceCode => compiles and add new methods • uses: aTrait => acquires behavior from Trait • acquire: aCompiledMethod => acquire the method
 
 
 
 
 12
  13. 13. Object-centric debugging, how is it implemented? 13
  14. 14. Implementation 14 Object-centric breakpoints Object-centric
 behavior
  15. 15. Implementation 15 Reflectivity Proxies Object-centric breakpoints Object-centric
 behavior
  16. 16. Implementation 16 Reflectivity Proxies Talents Object-centric breakpoints Object-centric
 behavior
  17. 17. Implementation 17 Reflectivity Proxies Talents Anonymous
 Classes Object-centric breakpoints Object-centric
 behavior
  18. 18. Implementation 18 Reflectivity Proxies Talents Anonymous
 Classes Object-centric breakpoints Object-centric
 behavior Object-centric … ???
  19. 19. Implementation goal 19 Reflectivity Proxies Talents Anonymous
 Classes Object-centric breakpoints Object-centric
 behavior Object-centric layer Object-centric
 …
  20. 20. Current problems • Implementation is mixing up different techniques without any clear interaction model • Requires to migrate the object to an anonymous subclass • Installation of object-centric instrumentation is not thread-safe • Sometimes make tools unstable • Obtaining objects to debug (but work has been done on that…)
 
 
 20
  21. 21. Part II Object-Centric Reverse Debugging 21
  22. 22. Demo 22
  23. 23. Reverse object-centric debugger 23
  24. 24. Reverse object-centric debugger 24
  25. 25. Reverse object-centric debugger 25
  26. 26. Reverse object-centric debugger 26
  27. 27. Reverse object-centric debugger 27
  28. 28. Reverse object-centric debugger 28
  29. 29. Reverse object-centric debugger 29
  30. 30. Reverse object-centric debugger 30
  31. 31. Reverse object-centric debugger 31
  32. 32. Reverse object-centric debugger 32
  33. 33. Reverse object-centric debugger 33 WIP
  34. 34. Reverse object-centric debugger • AST interpreter - Carolina Hernandez Phillips • Reverse-execution - Vincent Aranega, Steven Costiou • Object-centric debugger - Steven Costiou • Scriptable debugger - Thomas Dupriez 34 Who’s working on it?
  35. 35. Thanks! Questions? 35 Object-Centric Reverse Debugging Object-Centric Debugging • haltOnCall • haltOnCall: #selector • haltOnNextCall • haltOnceOnCall: #selector • haltOnCallWhen: condition
 • haltOnWriteTo: #instVarName • haltOnRead: #instVarName • haltOnWrite • haltOnRead
 • compile: sourceCode • uses: aTrait • acquire: aCompiledMethod

×