canmove, Confirmed users, Bureaucrats and Sysops emeriti
1,093
edits
No edit summary |
|||
(124 intermediate revisions by 9 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]] | |||
* [[Remote_Debugging_Protocol]] | |||
* [[DevTools/Features/Debugger/Notes]] has further implementation notes. | |||
== Planning == | == Planning == | ||
What follows is some plan-related sketching, please update appropriately. | 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. | |||
=== | {| 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 | |||
|- | |||
| 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. | |||
* | |||
=== | {| 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. | |||
|} | |||
=== | === 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. | |||
{| 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 | |||
|- | |||
| 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 | |||
| | |||
| | |||
| | |||
| | |||
|} | |||
__NOTOC__ | __NOTOC__ | ||