ac50c79a3e
V8 has internal mechanism to ignore steps and breaks inside internal scripts, in this CL it's reused for blackboxing implementation. Advantages: - much faster blackboxing implementation (before we at least wrap and collect current call stack for each step), - get rid of StepFrame action and potential pause in blackboxed code after N StepFrame steps, - simplification of debugger agent logic. Disadvtanges: - currently when user was paused in blackboxed code (e.g. on breakpoint) and then makes step action, debugger ignores blackboxed state of the script and allows to use step actions as usual - this behavior is regressed, we still able to support it on frontend side. Current state and proposed changes for blackboxing: https://docs.google.com/document/d/1hnzaXPAN8_QC5ENxIgxgMNDbXLraM_OXT73rAyijTF8/edit?usp=sharing BUG=v8:5842 R=yangguo@chromium.org,dgozman@chromium.org,alph@chromium.org Review-Url: https://codereview.chromium.org/2633803002 Cr-Commit-Position: refs/heads/master@{#42614}
79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
print('Checks framework debugging with blackboxed ranges.');
|
|
|
|
InspectorTest.addScript(
|
|
`
|
|
function foo() {
|
|
return boo();
|
|
}
|
|
function boo() {
|
|
return 42;
|
|
}
|
|
function testFunction() {
|
|
foo();
|
|
}
|
|
//# sourceURL=test.js`,
|
|
7, 26);
|
|
|
|
InspectorTest.setupScriptMap();
|
|
Protocol.Debugger.onPaused(message => {
|
|
InspectorTest.logCallFrames(message.params.callFrames);
|
|
InspectorTest.log('');
|
|
Protocol.Debugger.stepInto();
|
|
});
|
|
var scriptId;
|
|
Protocol.Debugger.onScriptParsed(message => {
|
|
if (message.params.url === 'test.js') {
|
|
scriptId = message.params.scriptId;
|
|
}
|
|
});
|
|
|
|
Protocol.Debugger.enable()
|
|
.then(() => Protocol.Debugger.setBlackboxPatterns({patterns: ['expr\.js']}))
|
|
.then(() => InspectorTest.runTestSuite(testSuite));
|
|
|
|
var testSuite = [
|
|
function testEntireScript(next) {
|
|
testPositions([position(0, 0)]).then(next);
|
|
},
|
|
function testFooNotBlackboxed(next) {
|
|
testPositions([position(11, 0)]).then(next);
|
|
},
|
|
function testFooBlackboxed(next) {
|
|
testPositions([position(8, 0), position(10, 3)]).then(next);
|
|
},
|
|
function testBooPartiallyBlackboxed1(next) {
|
|
// first line is not blackboxed, second and third - blackboxed.
|
|
testPositions([position(12, 0)]).then(next);
|
|
},
|
|
function testBooPartiallyBlackboxed2(next) {
|
|
// first line is blackboxed, second - not, third - blackboxed.
|
|
testPositions([
|
|
position(11, 0), position(12, 0), position(13, 0)
|
|
]).then(next);
|
|
},
|
|
function testBooPartiallyBlackboxed3(next) {
|
|
// first line is blackboxed, second and third - not.
|
|
testPositions([
|
|
position(11, 0), position(12, 0), position(14, 0)
|
|
]).then(next);
|
|
}
|
|
];
|
|
|
|
function testPositions(positions) {
|
|
schedulePauseOnNextStatement('', '');
|
|
return Protocol.Debugger
|
|
.setBlackboxedRanges({scriptId: scriptId, positions: positions})
|
|
.then(InspectorTest.logMessage)
|
|
.then(
|
|
() => Protocol.Runtime.evaluate(
|
|
{expression: 'testFunction()//# sourceURL=expr.js'}));
|
|
}
|
|
|
|
function position(line, column) {
|
|
return {lineNumber: line, columnNumber: column};
|
|
}
|