// This tests that a probe expression throwing an exception is recorded as // a per-hit error and does not fail the session. 'use strict'; const common = require('../common'); common.skipIfInspectorDisabled(); const fixtures = require('../common/fixtures'); const { spawnSyncAndExit } = require('../common/child_process'); const { assertProbeJson } = require('../common/debugger-probe'); const cwd = fixtures.path('debugger'); const fixture = 'probe-throwing-getter.js'; const probes = [ { expr: 'holder.throwingGetter', target: { suffix: fixture, line: 16 } }, // This clears the interval so the process will exit naturally. { expr: 'markProbesDone()', target: { suffix: fixture, line: 17 } }, ]; const url = fixtures.fileURL('debugger', fixture).href; spawnSyncAndExit(process.execPath, [ 'inspect', '--json', '--probe', `${fixture}:16`, '--expr', probes[0].expr, '--probe', `${fixture}:17`, '--expr', probes[1].expr, fixture, ], { cwd, env: { ...process.env, NODE_DEBUG: 'inspect_probe' } }, { status: 0, signal: null, stdout(output) { assertProbeJson(output, { v: 2, probes, results: [{ probe: 0, event: 'hit', hit: 1, location: { url, line: 16, column: 1 }, error: { message: 'Error: boom\n', details: { exception: { exceptionId: 1, text: 'Uncaught', lineNumber: 4, columnNumber: 4, scriptId: '', stackTrace: { callFrames: '' }, exception: { type: 'object', subtype: 'error', description: 'Error: boom\n' }, }, }, }, }, { probe: 1, event: 'hit', hit: 1, location: { url, line: 17, column: 1 }, result: { type: 'undefined' }, }, { event: 'completed', }], }); }, trim: true, });