// 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);