Modified the test program, link 
https://gist.github.com/abhi-bit/20b8569bc5d655659b51d425564eb49d - debug calls 
are now executing without grabbing Locker.

Problem I see right now, is with following flow of events:

User JS code running -> BreakPoint set -> ListBreakPoint call -> 
ClearBreakPoint Call -> User JS code execution resume - In above test code User 
JS code execution doesn’t resume. It appears for calling 
Debug::ProcessDebugMessages(), Locker is required hence calling it while 
executing JS code with required arguments - I think that’s a problem leading to 
user code execution being stuck at breakpoint. Suggestions please?


> On 17-Aug-2016, at 11:09 PM, Ben Noordhuis <[email protected]> wrote:
> 
> On Wed, Aug 17, 2016 at 4:51 PM, Abhishek Singh
> <[email protected]> wrote:
>> Hi Ben,
>> 
>>> On 17-Aug-2016, at 5:43 PM, Ben Noordhuis <[email protected]> wrote:
>>> 
>>> On Tue, Aug 16, 2016 at 6:22 PM, Abhishek Singh
>>> <[email protected]> wrote:
>>>> Hi Ben,
>>>> 
>>>> In sample example I shared, I was trying to simulate a behaviour similar 
>>>> to what my application(based on top of V8) saw - sleep calls were added to 
>>>> somehow make this example artificially simulate the app. I’ve modified the 
>>>> gist, hoping now it doesn’t create confusion.
>>>> 
>>>> Here is sample output from it, I’ll explain below what they 
>>>> mean(annotating by line no to make it easy to explain, otherwise would 
>>>> need ascii drawing :)):
>>>> 
>>>> line#   Output Message
>>>> ====================================
>>>> 1               debugger.ccTestBreakPoints179
>>>> 2               debugger.ccTestBreakPoints181
>>>> 3               debugger.ccSendDebugUserRequest146
>>>> 4               2016-08-16.21:33:16 DebugSetBreakpointHandler 
>>>> {"seq":0,"request_seq":1,"type":"response","command":"setbreakpoint","success":true,"body":{"type":"scriptId","breakpoint":1,"script_id":33,"line":1,"column":0,"actual_locations”:
>>>>                             
>>>> [{"line":1,"column":4,"script_id":33}]},"refs":[],"running":true}
>>>> 5               2016-08-16.21:33:18 DebugListBreakpointHandler 
>>>> {"seq":1,"request_seq":3,"type":"response","command":"listbreakpoints","success":true,"body":{"breakpoints":[{"number":1,"line":1,"column":0,"groupId":null,"active":true,"condition":null,"actual_locations":[{"line":1,"column":4,"script_id":33}],"type":"scriptId","script_id":33}],"breakOnExceptions":false,"breakOnUncaughtExceptions":false},"refs":[],"running":true}
>>>> 6               debugger.ccSendDebugUserRequest148
>>>> 7               2016-08-16.21:33:18SendDebugUserRequest{"type": "json", 
>>>> "client": "Chrome Canary", "counter":0}
>>>> 8               debugger.ccSendDebugUserRequest162
>>>> 9               2016-08-16.21:33:18 DebugListBreakpointHandler 
>>>> {"seq":2,"type":"event","event":"break","body":{"invocationText":"DebugUserRequest(doc=#<Object>)","sourceLine":1,"sourceColumn":4,"sourceLineText":"
>>>>     if (doc.type === \"json\") 
>>>> {","script":{"id":33,"name":null,"lineOffset":0,"columnOffset":0,"lineCount":6},"breakpoints":[1]}}
>>>> 10              debugger.ccTestClearBreakPoints208
>>>> 
>>>> <Execution stuck beyond this point>
>>>> 
>>>> Line 1-2,4, 5 - basically setup breakpoint and lists them
>>>> Line 3,6,7-9 - trying to call the user supplied JS code but it doesn’t 
>>>> proceed to finish execution because it’s waiting at the breakpoint set 
>>>> earlier - hoping someone would fire continue/clearbreakpoint
>>>> Line 10 - Attempt to clear breakpoint but this guy can’t proceed further 
>>>> because the user supplied code(currently stuck at breakpoint) is holding 
>>>> the lock to the isolate
>>>> 
>>>> So my question is, how can the user supplied code execution could proceed 
>>>> further in this case?
>>> 
>>> I think I understand what you mean.  It sounds like you should be
>>> using v8::Debug::SendCommand() from the second thread,
>> 
>> Basically I’m trying to provide an IDE support for JS in the bundled 
>> product, so IDE would never know when “clearbreakpoint" or “continue” 
>> request is going to come. So when a “setbreakpoint” command is fired, I need 
>> to point the MessageHandler, SendCommand and ProcessDebugMessage & finally 
>> give up the Locker. I can’t hold up Locker from second thread(which I assume 
>> you referred to set_break_point thread). Please correct me if my assumption 
>> is wrong.
>> 
>> 
>>> without
>>> grabbing the Locker or changing the debug listener first.
>> 
>> Till now, I’ve been doing hit and trail for different combinations to avoid 
>> Locker - but I’ve never been able to run various debug command request 
>> handler without grabbing Locker. But I see v8 test-debug.cc in all places is 
>> testing debug apis without using Locker at all. Sorry I don’t know how to 
>> run handler code without grabbing Locker, when you’ve some time could you 
>> please comment on gist on what possibly I’m missing?
>> 
>> About “changing the debug listener first” - I didn’t get what you mean. 
>> Could you give hints on what specific changes you meant?
>> 
>> Given you mentioned 3 different approaches that could help solve my current 
>> issue(based on whatever explanation I was able to relay), I’m hoping one of 
>> them would apply to my use case.
> 
> In your gist, you call v8::Debug::SetMessageHandler() in a couple of
> places.  I'd change that to once at start-up so you don't need to grab
> the Locker when you want to send a message - you don't need it for
> v8::Debug::SendCommand().
> 
> -- 
> -- 
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
> --- 
> You received this message because you are subscribed to the Google Groups 
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to