canmove, Confirmed users, Bureaucrats and Sysops emeriti
1,093
edits
(Stack trace notes.) |
No edit summary |
||
(127 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 == | |||
* [[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. | |||
{| class="fullwidth-table" | {| class="fullwidth-table" | ||
|- | |- | ||
| style="font-weight: bold; background: #DDD;" | | | 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 | | 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__ | ||