DevTools/Features/Debugger
From MozillaWiki
Please use "Edit with form" above to edit this page.
Status
Debugger | |
Stage | Complete |
Status | In progress |
Release target | Firefox 15 |
Health | OK |
Status note | ` |
Team
Product manager | Kevin Dangoor |
Directly Responsible Individual | Rob Campbell |
Lead engineer | Panos Astithas |
Security lead | Mark Goodwin |
Privacy lead | ` |
Localization lead | ` |
Accessibility lead | ` |
QA lead | Ioana Budnar |
UX lead | Stephen Horlander |
Product marketing lead | ` |
Operations lead | ` |
Additional members | Jason Orendorff, Jim Blandy, Victor Porof, Mihai Sucan |
Open issues/risks
`
Stage 1: Definition
1. Feature overview
New JavaScript debugger.
2. Users & use cases
JavaScript developers
3. Dependencies
`
4. Requirements
`
Non-goals
`
Stage 2: Design
5. Functional specification
`
6. User experience design
`
Stage 3: Planning
7. Implementation plan
`
8. Reviews
Security review
`
Privacy review
`
Localization review
`
Accessibility
`
Quality Assurance review
`
Operations review
`
Stage 4: Development
9. Implementation
`
Stage 5: Release
10. Landing criteria
`
Feature details
Priority | P1 |
Rank | 6 |
Theme / Goal | ` |
Roadmap | Developer Tools |
Secondary roadmap | ` |
Feature list | Desktop |
Project | ` |
Engineering team | DevTools |
Team status notes
status | notes | |
Products | ` | ` |
Engineering | ` | ` |
Security | sec-review-complete | Notes |
Privacy | ` | ` |
Localization | ` | ` |
Accessibility | ` | ` |
Quality assurance | work in progress | Test Plan |
User experience | ` | ` |
Product marketing | ` | ` |
Operations | ` | ` |
Designs
- JSInspector
- Remote_Debugging_Protocol
- DevTools/Features/Debugger/Notes has further implementation notes.
Planning
What follows is some plan-related sketching, please update appropriately. List of milestones/sprints is roughly in order.
Bootstrapping/Stack Traces
- Working remote protocol, exposing stack frames with JSD2.
- Relying on debugger statement, no breakpoints.
- Only "continue" after stopping in debugger.
- UI shell in firefox
- UI for stack traces (without arguments)
- No iframe support just yet.
Description | Area | Bug | Owner | Best | Likely | Worst | Status |
Debugging global/Root actor registration/Socket Listener | Remote Proto | dcamp | 2d | 3d | 5d | In remote-debug. | |
Browser root actor/tab actors (not as thread-like actors) | Browser Proto | dcamp | 2d | 2d | 4d | In remote-debug. | |
Protocol handler thread (socket transport) | Remote Proto | dcamp | ? | ? | ? | Put off for now. | |
Debug Object creation and debuggerHook | JSD2 | jorendorff | 1d | 1d | 2d | In jsdb2 | |
Debug Object loader | JSD2ish | dcamp | In remote-debug | ||||
Debug Object support for frame inspection | JSD2 | jorendorff | type, this, older, live, callee, generator, arguments complete. | ||||
Debug Object support for the toplevel globals in tab actor - debuggerHook spawning a nested event loop. | Browser Proto | dcamp | 2d | 2d | 4d | In remote-debug | |
New execution model specification in the remote protocol | Remote Proto | jimb | Complete | ||||
debuggerHook and "continue" exposed over remote protocol as specified. | Remote Proto | dcamp | 3d | 3d | 5d | In remote-debug. | |
Client JS API (socket transport) | UI Shell | dcamp | 1d | 2d | 3d | In remote-debug. | |
HTML UI shell per tab, in its own window | UI Shell | dcamp | 2d | 2d | 5d | In remote-debug | |
UI responding to pauses (from debugger keyword) | Execution Handling | dcamp | 2d | 2d | 4d | In remote-debug | |
HTML Stack frame viewer (no locals/environment yet, just | Execution Handling | dcamp | 2d | 3d | 5d | In patch queue |
Property Viewer
- A simple property viewer, limited to viewing frame arguments for now.
Description | Area | Bug | Owner | Best | Likely | Worst | Status |
Debug.Object.prototype.{proto, class, isFunction, name, getOwnPropertyDescriptor, getOwnPropertyNames} | JSD2 | jorendorff/jimb | |||||
Primitive data grips for frame arguments | Remote Proto | dcamp | 1d | 1d | 2d | In remote-debug | |
Pause-lifetime object grips | Remote Proto | dcamp | 1d | 1d | 2d | In remote-debug | |
Thread-lifetime grip promotion | Remote Proto | dcamp | 1d | 2d | 4d | In remote-debug | |
Object grip enumeration | Remote Proto | dcamp | 1d | 2d | 4d | Waiting on jsd2 | |
Property UI design | UI | past/dcamp | 1d | 1d | 2d | ||
Property Inspector UI | UI | past | ? | ? | ? | Split up as needed. |
Source Viewer
- Enough to visualize current line/stack frames/etc.
- Debug.Script.prototype.{url,startLine,length,getAllOffsets,getLineOffsets,getOffsetLine} - jorendorff
- Debug.Frame.prototype.{callee,script,offset} - jorendorff
- No source list yet, will only reflect sources handed to it in pause states.
- Can use normal view source/firebug method (loading from necko preferring the cache) for getting static script sources (in-document <script> etc).
- Needs the engine to provide sources for exotic script sources (eval/appendNode/etc.)
- Very simple source viewer, improving the source viewer can happen outside the critical path.
Execution
- throw hook (Debug.hooks.throw) - jorendorff - Done.
- error hook (Debug.hooks.error) - jorendorff
- resume (resumption values) - jorendorff - Done.
- work out low-level stepping support with the JM team - jorendorff/jimb
- implement Debug object stepping support (Debug.hooks.interrupt, Debug.Script.prototype.singleStepMode, etc.) - jorendorff
- step into/step out/finish - dcamp
In this timeframe, we also want to be able to:
- Show native calls on the stack - jorendorff, luke
- Show debugger frames on the stack - jorendorff
Frame Tree Support
- Debug.prototype.{add,remove}Debuggee() - jorendorff
- Frame tree support in the tab actors.
Environment/Property Viewer
- JSD2 support
- Debug.Frame.prototype.environment - jorendorff
- Debug.Environment.prototype.{type,outerEnvironment,object, boundIdentifiers,getVariableDescriptor,findBinding} - jorendorff
By the time this milestone is complete, we'll have a somewhat competent debugger if you're willing to use debugger; statements instead of breakpoints.
Source Selector
- JSD2 support
- newScript hook
- enumerate scripts? Maybe not - since we need currently need to reload anyway to recompile scripts for debugging, might be ok to always just watch the newScript hook.
- Protocol support
- new script notification.
- UI support: dropdown of available scripts, triggering loads in the source viewer.
Breakpoints
- JSD2 support.
- Protocol-side breakpoints will set physical breakpoints at each script (including newly-added scripts)
- Need to work out breakpoint persistence across reloads (needs to be done early enough to catch scripts run during the load).
- Set breakpoints in the source gutter
- Set breakpoints from a command line (?)
- Disable/Enable/Delete breakpoints
More Milestones
In no particular order...
- Web Worker debugging (might not be needed for an initial release, but would be really nice)
- Chrome debugging (probably not be needed for an initial release)
Floating Tasks
Here are a few tasks that I haven't slotted into any specific milestone, and could be tackled separately alongside the other milestones. At least some of these would block a final release of a capable debugger.
Description | Area | Bug | Owner | Best | Likely | Worst | Status |
E10S content process support | Remote Proto | dcamp? | 1w | 3w | 2w | ||
Improved script origin information | JSD2 | bug 637572 | jimb | ||||
Waive slow script dialog (jorendorff was seeing them after resuming) | JSD2 | ||||||
Improve source viewer (after basic source viewer is added) | Firefox UI | No Owner |