1. Overview
  2. Debugging workflow
  3. Debugging workflow: CI
  4. Basic interface
  5. Call stacks
  6. Explaining dataflow
  7. Multiprocess
  8. Search box
  9. Source files
  10. Condition and print expressions
  11. Toolbox
  12. Alerts
  13. Application logs
  14. Callees
  15. View operators
  16. Notebook
  17. Instruction execution
  18. Javascript
  19. Browser UI integration
  20. Screenshots
  21. Additional views
  22. GDB
  23. System debug info
  24. Compiler issues
  25. The Pernosco vision
  26. Related work


During complex debugging sessions developers need to record their progress. Pernosco provides first-class support for this in the form of the notebook. When a user changes focus to a new moment in time (or a different stack frame at the same moment), a note is automatically added to the notebook to record the new focus. We also add a note when the user selects a variable value to display. Initially the note is temporary and replaced at the next focus change, but the user just needs to click on it to make it persist. Users can add arbitrary text to the notes. Clicking on a note jumps to its moment. Developers can use the notebook to record where they have been in time and what they have learned.

Notes persist indefinitely and are continuously synchronized across all debugging sessions for a given recording. A developer can open multiple Pernosco windows for the same recording to simultaneously inspect different points in time, or to more efficiently use screen real estate. The notebook (being shared across all the windows) is a convenient way to coordinate work across those windows, e.g. by opening a new window and clicking on some specific note to jump to that moment.

The notebook facilitates collaboration. Information gathered by one developer can be recorded in the notebook to help another developer can carry on the analysis. Since notes are continuously synchronized, they also help developers work together in real time. Debugging can be social! The notebook also serves as archive of debugging history and knowledge for future reference.

Users recording their thoughts in the notebook also improves our ability to understand how people debug.

<< View operators Instruction execution >>