Skip to content
Permalink
Browse files

src: disconnect inspector before exiting out of fatal exception

So that coverage, .etc are properly written in case of a normal
fatal exception.

PR-URL: #29611
Fixes: #29570
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Ben Coe <bencoe@gmail.com>
  • Loading branch information...
joyeecheung authored and bcoe committed Sep 19, 2019
1 parent c5f5f84 commit b2634238d8d50e3801cb716e3f3165be1c50418a
Showing with 28 additions and 0 deletions.
  1. +3 −0 src/node_errors.cc
  2. +7 −0 test/fixtures/v8-coverage/throw.js
  3. +18 −0 test/parallel/test-v8-coverage.js
@@ -978,6 +978,9 @@ void TriggerUncaughtException(Isolate* isolate,

// Now we are certain that the exception is fatal.
ReportFatalException(env, error, message, EnhanceFatalException::kEnhance);
#if HAVE_INSPECTOR
profiler::EndStartedProfilers(env);
#endif

// If the global uncaught exception handler sets process.exitCode,
// exit with that code. Otherwise, exit with 1.
@@ -0,0 +1,7 @@
const a = 99;
if (true) {
const b = 101;
} else {
const c = 102;
}
throw new Error('test');
@@ -35,6 +35,24 @@ function nextdir() {
assert.strictEqual(fixtureCoverage.functions[0].ranges[1].count, 0);
}

// Outputs coverage when error is thrown in first tick.
{
const coverageDirectory = path.join(tmpdir.path, nextdir());
const output = spawnSync(process.execPath, [
require.resolve('../fixtures/v8-coverage/throw')
], { env: { ...process.env, NODE_V8_COVERAGE: coverageDirectory } });
if (output.status !== 1) {
console.log(output.stderr.toString());
}
assert.strictEqual(output.status, 1);
const fixtureCoverage = getFixtureCoverage('throw.js', coverageDirectory);
assert.ok(fixtureCoverage, 'coverage not found for file');
// First branch executed.
assert.strictEqual(fixtureCoverage.functions[0].ranges[0].count, 1);
// Second branch did not execute.
assert.strictEqual(fixtureCoverage.functions[0].ranges[1].count, 0);
}

// Outputs coverage when process.exit(1) exits process.
{
const coverageDirectory = path.join(tmpdir.path, nextdir());

0 comments on commit b263423

Please sign in to comment.
You can’t perform that action at this time.