current commit
260601.7 · debugger: add more logs to probe mode
// 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<stack>',
          details: {
            exception: {
              exceptionId: 1,
              text: 'Uncaught',
              lineNumber: 4,
              columnNumber: 4,
              scriptId: '<scriptId>',
              stackTrace: { callFrames: '<callFrames>' },
              exception: { type: 'object', subtype: 'error', description: 'Error: boom\n<stack>' },
            },
          },
        },
      }, {
        probe: 1,
        event: 'hit',
        hit: 1,
        location: { url, line: 17, column: 1 },
        result: { type: 'undefined' },
      }, {
        event: 'completed',
      }],
    });
  },
  trim: true,
});