DevTools/Features/Debugger
Status
Debugger | |
Stage | Complete |
Status | In progress |
Release target | Firefox 15 |
Health | OK |
Status note | ` |
{{#set:Feature name=Debugger
|Feature stage=Complete |Feature status=In progress |Feature version=Firefox 15 |Feature health=OK |Feature 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 |
{{#set:Feature product manager=Kevin Dangoor
|Feature feature manager=Rob Campbell |Feature lead engineer=Panos Astithas |Feature security lead=Mark Goodwin |Feature privacy lead=` |Feature localization lead=` |Feature accessibility lead=` |Feature qa lead=Ioana Budnar |Feature ux lead=Stephen Horlander |Feature product marketing lead=` |Feature operations lead=` |Feature 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
` {{#set:Feature open issues and risks=` |Feature overview=New JavaScript debugger. |Feature users and use cases=JavaScript developers |Feature dependencies=` |Feature requirements=` |Feature non-goals=` |Feature functional spec=` |Feature ux design=` |Feature implementation plan=` |Feature security review=` |Feature privacy review=` |Feature localization review=` |Feature accessibility review=` |Feature qa review=` |Feature operations review=` |Feature implementation notes=` |Feature landing criteria=` }}
Feature details
Priority | P1 |
Rank | 6 |
Theme / Goal | ` |
Roadmap | Developer Tools |
Secondary roadmap | ` |
Feature list | Desktop |
Project | ` |
Engineering team | DevTools |
{{#set:Feature priority=P1
|Feature rank=6 |Feature theme=` |Feature roadmap=Developer Tools |Feature secondary roadmap=` |Feature list=Desktop |Feature project=` |Feature 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 | ` | ` |
{{#set:Feature products status=`
|Feature products notes=` |Feature engineering status=` |Feature engineering notes=` |Feature security status=sec-review-complete |Feature security health=OK |Feature security notes=Notes |Feature privacy status=` |Feature privacy notes=` |Feature localization status=` |Feature localization notes=` |Feature accessibility status=` |Feature accessibility notes=` |Feature qa status=work in progress |Feature qa notes=Test Plan |Feature ux status=` |Feature ux notes=` |Feature product marketing status=` |Feature product marketing notes=` |Feature operations status=` |Feature operations notes=` }}
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 |