The default bug view has changed. See this FAQ.

Implement the debugger pause request (at the main loop)

RESOLVED FIXED in Firefox 13

Status

()

Firefox
Developer Tools: Debugger
P2
normal
RESOLVED FIXED
6 years ago
5 years ago

People

(Reporter: dcamp, Assigned: past)

Tracking

9 Branch
Firefox 13
x86
Mac OS X
Points:
---
Dependency tree / graph

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(1 attachment, 3 obsolete attachments)

(Reporter)

Description

6 years ago
When sitting at the main loop, a pause request should put the debuggee in a paused state as though it hit a breakpoint.

A complete implementation of the pause request would actually interrupt a running thread, but we can leave that for another bug - it's much more difficult.
FWIW, the only way we can pause the debuggee currently that I can think of, is by delaying the return from an event handler (onDebuggerStatement, onNewScript, etc.), essentially communicating synchronously with the client. It's obviously a terrible idea, but it's the only way to solve the get-new-script-then-set-breakpoints problem, without waiting for a new API.
jimb explained how this should work to me. The 'interrupt' request type can be implemented by the debugger by just calling suppressEventHandling. Since the debugger and debuggee share the same event loop the debuggee is effectively paused when we make sure that no events can be delivered. The thread or tab client can have an isPaused method and an ensurePaused method that sends the interrupt request when not in a paused state. The setBreakpoint method can automatically call ensurePaused before setting the breakpoint as a bonus to the caller and a resume packet if it had to send an interrupt one.
Assignee: nobody → past
Status: NEW → ASSIGNED
Created attachment 582006 [details] [diff] [review]
Working patch

This implements the 'interrupt' protocol request that pauses the debuggee when it is in the main loop. An immediate use I found is to turn the Resume button into a toggle that pauses when the debuggee is running and resumes when the debuggee is paused. I'm also using it to manually enter the paused state for setting a breakpoint, but that will be automated in another bug.

One other significant change I made, is that when entering a nested event loop I suspend timeouts and resume them when exiting. This should prevent debuggee setTimeout calls to fire while it is paused.
Attachment #582006 - Flags: review?(dcamp)
Component: Developer Tools → Developer Tools: Debugger
QA Contact: developer.tools → developer.tools.debugger
Blocks: 711125
Created attachment 587303 [details] [diff] [review]
Working patch v2

Rebased.
Attachment #582006 - Attachment is obsolete: true
Attachment #582006 - Flags: review?(dcamp)
Attachment #587303 - Flags: review?(dcamp)
Priority: -- → P2
Created attachment 590651 [details] [diff] [review]
Working patch v3

Rebased and refactored to take the latest superreview-requested changes into account.
Attachment #587303 - Attachment is obsolete: true
Attachment #587303 - Flags: review?(dcamp)
Attachment #590651 - Flags: review?(dcamp)
(Reporter)

Comment 6

5 years ago
Comment on attachment 590651 [details] [diff] [review]
Working patch v3

There's hope that eventually an interrupt packet could actually interrupt running script (by poking the execution hook that the slowrun dialog uses), but obviously a lot of work needs to happen before that's the case (processing packets on another thread, for starters).

This is perfect for now, just wanted to mention that in case I hadn't before.
Attachment #590651 - Flags: review?(dcamp) → review+
Try run:

https://tbpl.mozilla.org/?tree=Try&rev=e808fa2475c6
Whiteboard: [land-in-fx-team]
Created attachment 595695 [details] [diff] [review]
[in-fx-team] Working patch v3.1

Updated patch metadata.
Attachment #590651 - Attachment is obsolete: true
Attachment #595695 - Flags: review+
Attachment #595695 - Attachment description: Working patch v3.1 → [in-fx-team] Working patch v3.1
https://hg.mozilla.org/integration/fx-team/rev/c98d2cd079d5
Whiteboard: [land-in-fx-team] → [fixed-in-fx-team]
https://hg.mozilla.org/mozilla-central/rev/c98d2cd079d5
Status: ASSIGNED → RESOLVED
Last Resolved: 5 years ago
Resolution: --- → FIXED
Whiteboard: [fixed-in-fx-team]
Target Milestone: --- → Firefox 13
You need to log in before you can comment on or make changes to this bug.