Skip to content

Commit

Permalink
module: ignore resolution failures for inspect-brk
Browse files Browse the repository at this point in the history
The resolution for the main entry point may fail when the resolution
requires a preloaded module to be executed first (for example when
adding new extensions to the resolution process). Silently skipping
such failures allow us to defer the resolution as long as needed
without having any adverse change (since the main entry point won't
resolve anyway if it really can't be resolved at all).
  • Loading branch information
arcanis committed Nov 14, 2019
1 parent 2bdeb88 commit 93a01d6
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 2 deletions.
7 changes: 5 additions & 2 deletions lib/internal/modules/cjs/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -1091,14 +1091,17 @@ Module.prototype._compile = function(content, filename) {
if (!resolvedArgv) {
// We enter the repl if we're not given a filename argument.
if (process.argv[1]) {
resolvedArgv = Module._resolveFilename(process.argv[1], null, false);
// The resolution may fail if it requires a preload script
try {
resolvedArgv = Module._resolveFilename(process.argv[1], null, false);
} catch {}
} else {
resolvedArgv = 'repl';
}
}

// Set breakpoint on module start
if (!hasPausedEntry && filename === resolvedArgv) {
if (resolvedArgv && !hasPausedEntry && filename === resolvedArgv) {
hasPausedEntry = true;
inspectorWrapper = internalBinding('inspector').callAndPauseOnStart;
}
Expand Down
Empty file.
5 changes: 5 additions & 0 deletions test/fixtures/test-resolution-inspect-brk-resolver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use strict';
// eslint-disable-next-line no-unused-vars
const common = require('../common');

require.extensions['.ext'] = require.extensions['.js'];
29 changes: 29 additions & 0 deletions test/sequential/test-resolution-inspect-brk.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
'use strict';
const common = require('../common');
common.skipIfInspectorDisabled();

// A test to ensure that preload modules are given a chance to execute before
// resolving the main entry point with --inspect-brk active.

const assert = require('assert');
const cp = require('child_process');
const path = require('path');

function test(execArgv) {
const child = cp.spawn(process.execPath, execArgv);

child.stderr.once('data', common.mustCall(function() {
child.kill('SIGTERM');
}));

child.on('exit', common.mustCall(function(code, signal) {
assert.strictEqual(signal, 'SIGTERM');
}));
}

test([
'--require',
path.join(__dirname, '../fixtures/test-resolution-inspect-brk-resolver.js'),
'--inspect-brk',
'../fixtures/test-resolution-inspect-resolver-main.ext',
]);

0 comments on commit 93a01d6

Please sign in to comment.