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

Basic interface

Pernosco displays a set of view panes, each showing some aspect of program execution across time.

Here Stdout/stderr shows what was written to the console during execution (technicially, every write to stdout/stderr of the root recorded process). Stack shows the function calls leading up to the current program point (that have not already returned). The basics-demo.cpp source view shows where the selected stack frame is executing. The   source annotations show which lines were executed in this function call.

Highlighted elements in each view pane show the current point in time relative to the other elements of the view.

Traditional debuggers have an notion of "the current point in time" that is tied to heavyweight internal state (typically a set of running processes). In Pernosco, "the current point in time" is still a useful UI concept (we call it the focus), but it is merely a parameter to queries to our omniscient database, so we can change it freely and instantly. In the demo below, the user clicks on "Line A" in the stdout view to jump directly to the point where that output was produced.

The Pernosco focus is the current point in time, plus a stack frame and optionally some data inside the program, that the user is currently inspecting. Clicking an element of a view shifts the focus to that element.

Another key concept is that all interactions should respond instantly. Omniscient debugging means there is no excuse for making developers wait. This is a toy example, but even in complex applications with lengthy run times we can shift the focus anywhere in the history and display the state immediately.

Window management

"Sea of panes" interfaces are not very satisfying. We have introduced concepts such as the search box and toolbox to mitigate some of the problems, but ultimately window management is a hard problem and we don't claim to have a great solution to it.