'use strict'; const common = require('../common'); common.skipIfInspectorDisabled(); const fixtures = require('../common/fixtures'); const startCLI = require('../common/debugger'); const assert = require('assert'); const path = require('path'); // Break on (uncaught) exceptions. { const scriptFullPath = fixtures.path('debugger', 'exceptions.js'); const script = path.relative(process.cwd(), scriptFullPath); const cli = startCLI(['--port=0', script]); (async () => { try { await cli.waitForInitialBreak(); await cli.waitForPrompt(); await cli.waitForPrompt(); assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 1 }); // Making sure it will die by default: await cli.command('c'); await cli.waitFor(/disconnect/); // Next run: With `breakOnException` it pauses in both places. await cli.stepCommand('r'); await cli.waitForInitialBreak(); assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 1 }); await cli.command('breakOnException'); await cli.stepCommand('c'); assert.ok(cli.output.includes(`exception in ${script}:3`)); await cli.stepCommand('c'); assert.ok(cli.output.includes(`exception in ${script}:9`)); // Next run: With `breakOnUncaught` it only pauses on the 2nd exception. await cli.command('breakOnUncaught'); await cli.stepCommand('r'); // Also, the setting survives the restart. await cli.waitForInitialBreak(); assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 1 }); await cli.stepCommand('c'); assert.ok(cli.output.includes(`exception in ${script}:9`)); // Next run: Back to the initial state! It should die again. await cli.command('breakOnNone'); await cli.stepCommand('r'); await cli.waitForInitialBreak(); assert.deepStrictEqual(cli.breakInfo, { filename: script, line: 1 }); await cli.command('c'); await cli.waitFor(/disconnect/); } finally { cli.quit(); } })().then(common.mustCall()); }