v8/test/inspector/regress/regress-crbug-1081162.js
Benedikt Meurer ea3ee6da79 [inspector] Derive breakpoint hint based on resolved location.
When setting a breakpoint on a line (in the DevTools front-end), the
front-end sends a columnNumber of 0 and the inspector automatically
resolves the actual location (in bytecode execution order). In order
to also support changing source code, the inspector memorizes a text
hint, and uses that to adjust the location upon reload. This hint was
however taken based on the original line and column numbers, rather than
the resolved location, which causes trouble when syntactic order doesn't
match execution order, as in case of `await o.m()`.

In order to address that we now remember the textual hint based on the
resolved location.

Fixed: chromium:1081162
Also-By: kimanh@chromium.org
Change-Id: I7d08373440693b7abc18c29c1a05929d771d3031
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2905606
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Auto-Submit: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Kim-Anh Tran <kimanh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#74675}
2021-05-19 14:46:57 +00:00

31 lines
1.1 KiB
JavaScript

// Copyright 2021 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.
let {session, contextGroup, Protocol} = InspectorTest.start('Regression test for crbug/1081162');
const source = `
async function foo(o) {
await o.bar();
}
`;
const url = 'v8://test/foo.js';
session.setupScriptMap();
InspectorTest.runAsyncTestSuite([
async function testBreakpointResolved() {
await Protocol.Debugger.enable();
contextGroup.addScript(source, 0, 0, url);
await Protocol.Debugger.onceScriptParsed();
let {result: {locations: [location]}} = await Protocol.Debugger.setBreakpointByUrl({url, lineNumber: 2, columnNumber: 0});
InspectorTest.log('After Debugger.setBreakpointByUrl');
await session.logSourceLocation(location);
contextGroup.addScript(source, 0, 0, url);
({params: {location}} = await Protocol.Debugger.onceBreakpointResolved());
InspectorTest.log('After Debugger.breakpointResolved');
await session.logSourceLocation(location);
await Protocol.Debugger.disable();
}
]);