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

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.

<< Debugging workflow: CI Call stacks >>