summaryrefslogtreecommitdiff
path: root/test/sequential/test-inspector-async-call-stack-abort.js
blob: ce2b43cdf02e826ed47361784ca010d586c8ad6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Check that abrupt termination when async call stack recording is enabled
// does not segfault the process.
'use strict';
const common = require('../common');
common.skipIfInspectorDisabled();
common.skipIf32Bits();

const { strictEqual } = require('assert');
const eyecatcher = 'nou, houdoe he?';

if (process.argv[2] === 'child') {
  common.disableCrashOnUnhandledRejection();
  const { Session } = require('inspector');
  const { promisify } = require('util');
  const { internalBinding } = require('internal/test/binding');
  const { registerAsyncHook } = internalBinding('inspector');
  (async () => {
    let enabled = 0;
    registerAsyncHook(() => ++enabled, () => {});
    const session = new Session();
    session.connect();
    session.post = promisify(session.post);
    await session.post('Debugger.enable');
    strictEqual(enabled, 0);
    await session.post('Debugger.setAsyncCallStackDepth', { maxDepth: 42 });
    strictEqual(enabled, 1);
    throw new Error(eyecatcher);
  })();
} else {
  const { spawnSync } = require('child_process');
  const options = { encoding: 'utf8' };
  const proc = spawnSync(
    process.execPath, ['--expose-internals', __filename, 'child'], options);
  strictEqual(proc.status, 0);
  strictEqual(proc.signal, null);
  strictEqual(proc.stderr.includes(eyecatcher), true);
}