ec41a70e38
Doc: https://bit.ly/revive-restart-frame Context: https://crrev.com/c/3582395 (whole feature) This CL adds a new optional flag `canBeRestarted` to every call frame in Debugger.paused events. As the name suggests, the flag indicates whether we can restart a particular frame through Debugger.restartFrame once implemented. We are not able to safely restart all frames: * We don't support WASM frames * We don't support frames where resumable functions (async fns, generators) and embedder C++ frames are between the top-most frame and the to-be-restarted frame. Note that from a CDP perspective the flag doesn't actually guarantee a successful restart. CDP clients can issue CDP commands between the Debugger.paused event and before a user decides to restart a frame, which can potentially mess with the stack. The `canBeRestarted` flag tests are folded into the Debugger.restartFrame tests. As the feature is not yet fully implemented we short-circuit most of the tests for now and only run them up until the first Debugger.restartFrame call fails (except "fails-for-resumables.js"). This means the tests exercise the `canBeRestarted` flag, but not the restarting functionality itself. R=bmeurer@chromium.org, kimanh@chromium.org Bug: chromium:1303521 Change-Id: I01ab46dc3557ab8383960969fbe03e00604cc5e2 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3596160 Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Kim-Anh Tran <kimanh@chromium.org> Commit-Queue: Simon Zünd <szuend@chromium.org> Cr-Commit-Position: refs/heads/main@{#80046}
265 lines
7.3 KiB
Plaintext
265 lines
7.3 KiB
Plaintext
Checks basic ES6 modules support.
|
|
{
|
|
method : Debugger.scriptParsed
|
|
params : {
|
|
embedderName : module1
|
|
endColumn : 17
|
|
endLine : 5
|
|
executionContextId : <executionContextId>
|
|
hasSourceURL : false
|
|
hash : 395a588e3dc4c9155d342cb169bcd60d5b96c1a1
|
|
isLiveEdit : false
|
|
isModule : true
|
|
length : 83
|
|
scriptId : <scriptId>
|
|
scriptLanguage : JavaScript
|
|
sourceMapURL :
|
|
startColumn : 0
|
|
startLine : 0
|
|
url : module1
|
|
}
|
|
}
|
|
{
|
|
method : Debugger.scriptParsed
|
|
params : {
|
|
embedderName : module2
|
|
endColumn : 17
|
|
endLine : 5
|
|
executionContextId : <executionContextId>
|
|
hasSourceURL : false
|
|
hash : 15448dfe629fbe4306eae7194754692706c6d6ba
|
|
isLiveEdit : false
|
|
isModule : true
|
|
length : 84
|
|
scriptId : <scriptId>
|
|
scriptLanguage : JavaScript
|
|
sourceMapURL :
|
|
startColumn : 0
|
|
startLine : 0
|
|
url : module2
|
|
}
|
|
}
|
|
{
|
|
method : Debugger.scriptParsed
|
|
params : {
|
|
embedderName : module3
|
|
endColumn : 0
|
|
endLine : 11
|
|
executionContextId : <executionContextId>
|
|
hasSourceURL : false
|
|
hash : 2e8186096446efdc472a6e0559ea22216a664cb5
|
|
isLiveEdit : false
|
|
isModule : true
|
|
length : 286
|
|
scriptId : <scriptId>
|
|
scriptLanguage : JavaScript
|
|
sourceMapURL :
|
|
startColumn : 0
|
|
startLine : 0
|
|
url : module3
|
|
}
|
|
}
|
|
console.log(module1)
|
|
foo (module1:2:10)
|
|
(anonymous) (module3:5:12)
|
|
|
|
console.log(42)
|
|
(anonymous) (module3:5:8)
|
|
|
|
console.log(module2)
|
|
foo (module2:2:10)
|
|
(anonymous) (module3:6:12)
|
|
|
|
console.log(239)
|
|
(anonymous) (module3:6:8)
|
|
|
|
{
|
|
method : Debugger.paused
|
|
params : {
|
|
callFrames : [
|
|
[0] : {
|
|
callFrameId : <callFrameId>
|
|
canBeRestarted : false
|
|
functionLocation : {
|
|
columnNumber : 0
|
|
lineNumber : 0
|
|
scriptId : <scriptId>
|
|
}
|
|
functionName :
|
|
location : {
|
|
columnNumber : 0
|
|
lineNumber : 9
|
|
scriptId : <scriptId>
|
|
}
|
|
scopeChain : [
|
|
[0] : {
|
|
endLocation : {
|
|
columnNumber : 0
|
|
lineNumber : 11
|
|
scriptId : <scriptId>
|
|
}
|
|
object : {
|
|
className : Object
|
|
description : Object
|
|
objectId : <objectId>
|
|
type : object
|
|
}
|
|
startLocation : {
|
|
columnNumber : 0
|
|
lineNumber : 0
|
|
scriptId : <scriptId>
|
|
}
|
|
type : module
|
|
}
|
|
[1] : {
|
|
object : {
|
|
className : global
|
|
description : global
|
|
objectId : <objectId>
|
|
type : object
|
|
}
|
|
type : global
|
|
}
|
|
]
|
|
this : {
|
|
type : undefined
|
|
}
|
|
url :
|
|
}
|
|
]
|
|
hitBreakpoints : [
|
|
]
|
|
reason : other
|
|
}
|
|
}
|
|
{
|
|
id : <messageId>
|
|
result : {
|
|
result : [
|
|
[0] : {
|
|
configurable : true
|
|
enumerable : true
|
|
isOwn : true
|
|
name : foo1
|
|
value : {
|
|
className : Function
|
|
description : function foo() { console.log('module1'); return 42; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
writable : true
|
|
}
|
|
[1] : {
|
|
configurable : true
|
|
enumerable : true
|
|
isOwn : true
|
|
name : foo2
|
|
value : {
|
|
className : Function
|
|
description : function foo() { console.log('module2'); return 239; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
writable : true
|
|
}
|
|
[2] : {
|
|
configurable : true
|
|
enumerable : true
|
|
isOwn : true
|
|
name : foo3
|
|
value : {
|
|
className : Module
|
|
description : Module
|
|
objectId : <objectId>
|
|
type : object
|
|
}
|
|
writable : true
|
|
}
|
|
[3] : {
|
|
configurable : true
|
|
enumerable : true
|
|
isOwn : true
|
|
name : a1
|
|
value : {
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
writable : true
|
|
}
|
|
[4] : {
|
|
configurable : true
|
|
enumerable : true
|
|
isOwn : true
|
|
name : a2
|
|
value : {
|
|
description : 2
|
|
type : number
|
|
value : 2
|
|
}
|
|
writable : true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
{
|
|
method : Debugger.scriptFailedToParse
|
|
params : {
|
|
embedderName : module4
|
|
endColumn : 1
|
|
endLine : 0
|
|
executionContextId : <executionContextId>
|
|
hasSourceURL : false
|
|
hash : 021647ffab1f4e4e82675bc4cd924d3481abe278
|
|
isModule : true
|
|
length : 1
|
|
scriptId : <scriptId>
|
|
scriptLanguage : JavaScript
|
|
sourceMapURL :
|
|
startColumn : 0
|
|
startLine : 0
|
|
url : module4
|
|
}
|
|
}
|
|
{
|
|
method : Runtime.exceptionThrown
|
|
params : {
|
|
exceptionDetails : {
|
|
columnNumber : 0
|
|
exception : {
|
|
className : SyntaxError
|
|
description : SyntaxError: Unexpected token '}'
|
|
objectId : <objectId>
|
|
preview : {
|
|
description : SyntaxError: Unexpected token '}'
|
|
overflow : false
|
|
properties : [
|
|
[0] : {
|
|
name : stack
|
|
type : string
|
|
value : SyntaxError: Unexpected token '}'
|
|
}
|
|
[1] : {
|
|
name : message
|
|
type : string
|
|
value : Unexpected token '}'
|
|
}
|
|
]
|
|
subtype : error
|
|
type : object
|
|
}
|
|
subtype : error
|
|
type : object
|
|
}
|
|
exceptionId : <exceptionId>
|
|
executionContextId : <executionContextId>
|
|
lineNumber : 0
|
|
scriptId : <scriptId>
|
|
text : Uncaught SyntaxError: Unexpected token '}'
|
|
url : module4
|
|
}
|
|
timestamp : <timestamp>
|
|
}
|
|
}
|
|
queryObjects returns Array(N)
|