Platform/JSDebugv2: Difference between revisions
< Platform
Jump to navigation
Jump to search
No edit summary |
|||
Line 1: | Line 1: | ||
= JavaScript Debugging Interface, v2 = | = <tt>js::dbg2</tt>: JavaScript Debugging Interface, v2 = | ||
We'd like to improve the Mozilla platform's debugging facilities, for a number of reasons: | We'd like to improve the Mozilla platform's debugging facilities, for a number of reasons: |
Revision as of 20:34, 29 April 2010
js::dbg2: JavaScript Debugging Interface, v2
We'd like to improve the Mozilla platform's debugging facilities, for a number of reasons:
- Beyond debuggers, we want to encourage the creation of other sorts of monitoring and manipulation tools for web code; "watching programs run" is a broad charge. Think DTrace and SystemTap.
- Our JavaScript implementation is changing rapidly; we need to do better than falling back to the bytecode interpreter whenever the debugger is enabled.
- We need to be able to monitor and debug worker threads.
- We need to be able to monitor and debug JavaScript running on embedded devices.
- Now that SpiderMonkey is C++, an interface designed in that language can be more expressive and less error-prone than a C interface.
Long-term goals
- The interface must operate at the source language level, and not expose details of the implementation technique: it should behave the same way regardless of whether the debuggee is being executed by a bytecode interpreter (SpiderMonkey classic), a just-in-time compiler (TraceMonkey), or a whole-method JIT (Jägermonkey). If the implementation compiles to native code, the debugging interface should be independent of the underlying processor architecture. The interface should be sufficiently high-level to allow debugging of (say) JITted code without requiring the implementation to pretend that is still a bytecode interpreter.
- The interface must support cross-thread debugging: if the client uses the interfaces provided for this purpose, it should be able to debug JavaScript code running in another thread.
- The interface must be cross-runtime: it should allow full inspection of JavaScript values, including objects, without creating direct inter-runtime object references or otherwise violating the rules for working with multiple runtimes.
- The interface must be network-transparent: using the appropriate interfaces, a client should be able to inspect the state of a JavaScript program running on another machine.
Since the interface is both is network-transparent and independent of the implementation's machine architecture, this means it can be used for debugging JavaScript running on (say) mobile devices, assuming an appropriate connection can be set up.