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


Pernosco was designed from the start to support debugging of multiprocess recordings. All debugging operations operate across all processes by default.

Multiprocess applications such as Firefox share memory between processes and these memory regions are typically mapped at different addresses in each process. Accurately tracking data flow between processes requires the debugger to understand how the virtual address space of each process maps onto "physical memory". Pernosco does this, and therefore tracing the dataflow to an address X in one process may reveal it was written at address Y in another process. (This can also happen within a single process when it has multiple shared mappings of the same page(s).)