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

Explaining dataflow

Pernosco can trace dataflow backwards in time, from where a variable has an incorrect value back to where that variable was set — instantly. Clicking on a displayed value opens a "dataflow" view showing where the value came from. When the value set was simply copied from some other memory or register location, Pernosco displays the copy step and then automatically continues the explanation by following the source of the copy further backward in time. Helping the user skip over trivial copy steps accelerates the debugging process, especially for move-intensive code like Rust and some modern C++. On the other hand, some moves are important, e.g. "print" functions that copy data into output buffers, and Pernosco has heuristics to highlight those.

Because Pernosco is aware of all program state across all recorded processes, it can even track data backwards through system constructs like pipes and sockets. A data value can be followed through a pair of read and write operations on a socket and back to its ultimate origin.