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

Notebook

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.