| // Copyright 2020 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. |
| |
| utils.load('test/inspector/wasm-inspector-test.js'); |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start( |
| 'Step into a function that starts with a non-breakable opcode (i.e. ' + |
| 'block), then step from there. See https://crbug.com/1137710.'); |
| session.setupScriptMap(); |
| |
| var builder = new WasmModuleBuilder(); |
| |
| var callee = builder.addFunction('callee', kSig_v_v) |
| .addBody([kExprBlock, kWasmStmt, kExprEnd]) |
| .index; |
| |
| var main = builder.addFunction('main', kSig_v_i) |
| .addBody([kExprCallFunction, callee]) |
| .exportFunc(); |
| |
| var module_bytes = builder.toArray(); |
| |
| (async function test() { |
| InspectorTest.logProtocolCommandCalls('Debugger.stepInto'); |
| InspectorTest.logProtocolCommandCalls('Debugger.resume'); |
| |
| await Protocol.Debugger.enable(); |
| InspectorTest.log('Setting up global instance variable.'); |
| WasmInspectorTest.instantiate(module_bytes); |
| const [, {params: wasmScript}] = await Protocol.Debugger.onceScriptParsed(2); |
| |
| InspectorTest.log(`Got wasm script: ${wasmScript.url}`); |
| |
| // Set a breakpoint in 'main', at the call. |
| InspectorTest.log(`Setting breakpoint on offset ${main.body_offset}`); |
| await Protocol.Debugger.setBreakpoint({ |
| location: { |
| scriptId: wasmScript.scriptId, |
| lineNumber: 0, |
| columnNumber: main.body_offset |
| } |
| }); |
| |
| InspectorTest.log('Running main function.'); |
| Protocol.Runtime.evaluate({ expression: 'instance.exports.main()' }); |
| for (let action of ['stepInto', 'stepInto', 'resume']) { |
| const {params: {callFrames}} = await Protocol.Debugger.oncePaused(); |
| await session.logSourceLocation(callFrames[0].location); |
| Protocol.Debugger[action](); |
| } |
| InspectorTest.log('exports.main returned.'); |
| })().catch(reason => InspectorTest.log(`Failed: ${reason}`)) |
| .finally(InspectorTest.completeTest); |