DevTools/Features/Debugger: Difference between revisions
No edit summary |
|||
(30 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
{| | {{FeatureStatus | ||
| | |Feature name=Debugger | ||
| | |Feature stage=Complete | ||
| | |Feature status=In progress | ||
| | |Feature version=Firefox 15 | ||
| | |Feature health=OK | ||
| | }} | ||
{{FeatureTeam | |||
| | |Feature product manager=Kevin Dangoor | ||
| | |Feature feature manager=Rob Campbell | ||
|Feature lead engineer=Panos Astithas | |||
| | |Feature security lead=Mark Goodwin | ||
|Feature qa lead=Ioana Budnar | |||
| | |Feature ux lead=Stephen Horlander | ||
|Feature additional members=Jason Orendorff, Jim Blandy, Victor Porof, Mihai Sucan | |||
}} | |||
== | {{FeaturePageBody | ||
|Feature overview=New JavaScript debugger. | |||
|Feature users and use cases=JavaScript developers | |||
}} | |||
== | {{FeatureInfo | ||
|Feature priority=P1 | |||
|Feature rank=6 | |||
|Feature roadmap=Developer Tools | |||
|Feature list=Desktop | |||
|Feature engineering team=DevTools | |||
}} | |||
{{FeatureTeamStatus | |||
= | |Feature security status=sec-review-complete | ||
|Feature security health=OK | |||
|Feature security notes=[[Security/Reviews/Firefox/RemoteDebug|Notes]] | |||
|Feature qa status=work in progress | |||
= | |Feature qa notes=[https://wiki.mozilla.org/index.php?title=DevTools/Features/Debugger/TestPlan Test Plan] | ||
}} | |||
== Designs == | == Designs == | ||
* [[JSInspector]] | |||
[[DevTools/Features/Debugger/Notes]] has further implementation notes. | * [[Remote_Debugging_Protocol]] | ||
* [[DevTools/Features/Debugger/Notes]] has further implementation notes. | |||
== Planning == | == Planning == | ||
Line 79: | Line 78: | ||
| 2d | | 2d | ||
| 4d | | 4d | ||
| | | In remote-debug. | ||
|- | |- | ||
| Protocol handler thread (socket transport) | | Protocol handler thread (socket transport) | ||
Line 88: | Line 87: | ||
| ? | | ? | ||
| ? | | ? | ||
| | | Put off for now. | ||
|- | |- | ||
| Debug Object creation and debuggerHook | | Debug Object creation and debuggerHook | ||
Line 97: | Line 96: | ||
| 1d | | 1d | ||
| 2d | | 2d | ||
| | | In jsdb2 | ||
|- | |- | ||
| Debug Object loader | | Debug Object loader | ||
Line 124: | Line 123: | ||
| 2d | | 2d | ||
| 4d | | 4d | ||
| In | | In remote-debug | ||
|- | |- | ||
| New execution model specification in the remote protocol | | New execution model specification in the remote protocol | ||
Line 133: | Line 132: | ||
| | | | ||
| | | | ||
| | | Complete | ||
|- | |- | ||
| debuggerHook and "continue" exposed over remote protocol as specified. | | debuggerHook and "continue" exposed over remote protocol as specified. | ||
Line 142: | Line 141: | ||
| 3d | | 3d | ||
| 5d | | 5d | ||
| | | In remote-debug. | ||
|- | |- | ||
| Client JS API (socket transport) | | Client JS API (socket transport) | ||
Line 151: | Line 150: | ||
| 2d | | 2d | ||
| 3d | | 3d | ||
| | | In remote-debug. | ||
|- | |- | ||
| HTML UI shell per tab, in its own window | | HTML UI shell per tab, in its own window | ||
Line 160: | Line 159: | ||
| 2d | | 2d | ||
| 5d | | 5d | ||
| | | In remote-debug | ||
|- | |- | ||
| UI responding to pauses (from debugger keyword) | | UI responding to pauses (from debugger keyword) | ||
Line 169: | Line 168: | ||
| 2d | | 2d | ||
| 4d | | 4d | ||
| | | In remote-debug | ||
|- | |- | ||
| HTML Stack frame viewer (no locals/environment yet, just | | HTML Stack frame viewer (no locals/environment yet, just | ||
Line 178: | Line 177: | ||
| 3d | | 3d | ||
| 5d | | 5d | ||
| In patch queue | |||
|} | |||
=== Property Viewer === | |||
* A simple property viewer, limited to viewing frame arguments for now. | |||
{| class="fullwidth-table" | |||
|- | |||
| style="font-weight: bold; background: #DDD;" | Description | |||
| style="font-weight: bold; background: #DDD;" | Area | |||
| style="font-weight: bold; background: #DDD;" | Bug | |||
| style="font-weight: bold; background: #DDD;" | Owner | |||
| style="font-weight: bold; background: #DDD;" | Best | |||
| style="font-weight: bold; background: #DDD;" | Likely | |||
| style="font-weight: bold; background: #DDD;" | Worst | |||
| style="font-weight: bold; background: #DDD;" | 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. | |||
|} | |} | ||
Line 208: | Line 286: | ||
=== Environment/Property Viewer === | === Environment/Property Viewer === | ||
* JSD2 support | * JSD2 support | ||
** Debug.Frame.prototype.environment - jorendorff | ** Debug.Frame.prototype.environment - jorendorff | ||
** Debug.Environment.prototype.{type,outerEnvironment,object, boundIdentifiers,getVariableDescriptor,findBinding} - 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. | 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. | ||
Line 297: | Line 370: | ||
|} | |} | ||
__NOTOC__ | __NOTOC__ | ||
Latest revision as of 13:40, 30 August 2012
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 |