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

Javascript

In addition to statically-compiled languages such as C, C++ and Rust, Pernosco can also support higher-level languages. We support Javascript running in the V8 virtual machine. For example, Pernosco can debug JS running in Node and Chromium (Web apps, browser extensions, Electron apps).

Almost all Pernosco features work as expected. Pernosco shows JS source code. You can search for executions of specific JS functions and source lines. Pernosco displays the values of JS variables. You can use JS variables in conditional and print expressions. Pernosco call stacks include both JS and native stack frames. Pernosco shows which lines in the current function activation were executed, and the callees view shows JS callees of JS functions.

JS and native debugging are fully integrated. For example you can inspect the native state (e.g. instructions executed) while JS is executing.

Pernosco supports simple source maps. If the source appears obfuscated, Pernosco pretty-prints it.

Try out the demo for yourself!

Currently this only works with the V8 interpreter, not its compilers. You need to pass the flags --prof --prof-sampling-interval 1000000 --jitless --expose-gc --no-compilation-cache to V8 (e.g. see instructions for Chromium).

Pernosco does not provide a full "Web devtools" experience — we don't currently suport inspecting non-JS browser state.