DevTools/Features/Debugger

From MozillaWiki
Jump to: navigation, search
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

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