deps: Add node-inspect 1.10.6
This updates the bundled `node-inspect` to 1.10.6. Highlights: * `node --debug-port=1234 inspect` respects the custom port. * Test stability improvements on various platforms. Compare: https://github.com/nodejs/node-inspect/compare/v1.10.4...v1.10.6 PR-URL: https://github.com/nodejs/node/pull/11869 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
38299d2456
commit
b57f9ee3bf
27
deps/node-inspect/CHANGELOG.md
vendored
27
deps/node-inspect/CHANGELOG.md
vendored
@ -1,3 +1,30 @@
|
|||||||
|
### 1.10.6
|
||||||
|
|
||||||
|
* chore: Fix usage text for embedded mode - **[@addaleax](https://github.com/addaleax)** [#20](https://github.com/nodejs/node-inspect/pull/20)
|
||||||
|
- [`b0779f5`](https://github.com/nodejs/node-inspect/commit/b0779f597104e9ada5681f64d7e714525b753511) **chore:** Fix usage text for embedded mode
|
||||||
|
* print 'ok' after connection - **[@ofrobots](https://github.com/ofrobots)** [#25](https://github.com/nodejs/node-inspect/pull/25)
|
||||||
|
- [`2a47125`](https://github.com/nodejs/node-inspect/commit/2a4712577f6996fbb078dcfcd7320c397685d76a) **fix:** print 'ok' after connection
|
||||||
|
* Make autocompletion in REPL work - **[@aqrln](https://github.com/aqrln)** [#28](https://github.com/nodejs/node-inspect/pull/28)
|
||||||
|
- [`ccab737`](https://github.com/nodejs/node-inspect/commit/ccab737399249a8c2230ed6adfec579c7d724364) **fix:** Make autocompletion in REPL work
|
||||||
|
* Remove console.error() statement - **[@aqrln](https://github.com/aqrln)** [#30](https://github.com/nodejs/node-inspect/pull/30)
|
||||||
|
- [`032b045`](https://github.com/nodejs/node-inspect/commit/032b045d4d73622c77b7ebcc26781c6ad98200b3) **style:** Remove console.error() statement
|
||||||
|
* Take --debug-port into account - **[@jkrems](https://github.com/jkrems)** [#26](https://github.com/nodejs/node-inspect/pull/26)
|
||||||
|
- [`054d4b1`](https://github.com/nodejs/node-inspect/commit/054d4b10e65f12a3a4b10b4c0ab2a4768cc5e893) **fix:** Take --debug-port into account
|
||||||
|
* Delay run until breakpoints are restored - **[@jkrems](https://github.com/jkrems)** [#34](https://github.com/nodejs/node-inspect/pull/34)
|
||||||
|
- [`802b88c`](https://github.com/nodejs/node-inspect/commit/802b88c8ad0a57608cb9e0cb4bf46ed683bb6344) **fix:** Delay run until breakpoints are restored
|
||||||
|
- [`2b93173`](https://github.com/nodejs/node-inspect/commit/2b93173d95e7f8b30d85603613cb2ae3b3ec18db) **fix:** Use single string for paused notice
|
||||||
|
- [`b4d5ee2`](https://github.com/nodejs/node-inspect/commit/b4d5ee2a3d25613b35a2e8e10a0eb75582cc5654) **fix:** Work around inconsistent handling of strict directive
|
||||||
|
- [`f6ccfc7`](https://github.com/nodejs/node-inspect/commit/f6ccfc7f4d00ad4fdf3b581b677f8d7f1699c44c) **fix:** Only restart after port is free
|
||||||
|
- [`8b101bf`](https://github.com/nodejs/node-inspect/commit/8b101bf669ca102df4980bfad3e0436ef1c2f1a4) **test:** Skip exact match on AIX
|
||||||
|
* [`a4e4b6f`](https://github.com/nodejs/node-inspect/commit/a4e4b6feeba4dedfd2c89ef32f39e813314d3bbd) **chore:** Fix repo info in package.json
|
||||||
|
|
||||||
|
|
||||||
|
### 1.10.5
|
||||||
|
|
||||||
|
* docs: minor edits to governance docs - **[@joshgav](https://github.com/joshgav)** [#17](https://github.com/buggerjs/node-inspect/pull/17)
|
||||||
|
- [`a70fe04`](https://github.com/buggerjs/node-inspect/commit/a70fe04bdde9b7c74588685066291f9b11183328) **docs:** minor edits to governance docs
|
||||||
|
|
||||||
|
|
||||||
### 1.10.4
|
### 1.10.4
|
||||||
|
|
||||||
* [`1c31bf7`](https://github.com/buggerjs/node-inspect/commit/1c31bf7d1b3ea1b424ae0662526596670cb506c9) **chore:** Support embedded mode
|
* [`1c31bf7`](https://github.com/buggerjs/node-inspect/commit/1c31bf7d1b3ea1b424ae0662526596670cb506c9) **chore:** Support embedded mode
|
||||||
|
14
deps/node-inspect/CONTRIBUTING.md
vendored
14
deps/node-inspect/CONTRIBUTING.md
vendored
@ -4,8 +4,7 @@
|
|||||||
|
|
||||||
This document outlines some of the practices we care about.
|
This document outlines some of the practices we care about.
|
||||||
If you have any questions or suggestions about the process,
|
If you have any questions or suggestions about the process,
|
||||||
feel free to [open an issue](#reporting-issues)
|
feel free to [open an issue](#reporting-issues).
|
||||||
.
|
|
||||||
|
|
||||||
## Code of Conduct
|
## Code of Conduct
|
||||||
|
|
||||||
@ -13,11 +12,10 @@ The [Node.js Code of Conduct][] applies to this repo.
|
|||||||
|
|
||||||
[Node.js Code of Conduct]: https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md
|
[Node.js Code of Conduct]: https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md
|
||||||
|
|
||||||
## Code Contributions
|
## Governance
|
||||||
|
|
||||||
The nodereport project falls under the governance of the diagnostics
|
This project falls under the governance of the Node.js Diagnostics WG as
|
||||||
working group which is documented in:
|
described at <https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md>.
|
||||||
https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md.
|
|
||||||
|
|
||||||
## Developer's Certificate of Origin 1.1
|
## Developer's Certificate of Origin 1.1
|
||||||
|
|
||||||
@ -51,7 +49,7 @@ By making a contribution to this project, I certify that:
|
|||||||
|
|
||||||
If you find any mistakes in the docs or a bug in the code,
|
If you find any mistakes in the docs or a bug in the code,
|
||||||
please [open an issue in Github](https://github.com/nodejs/node-inspect/issues/new) so we can look into it.
|
please [open an issue in Github](https://github.com/nodejs/node-inspect/issues/new) so we can look into it.
|
||||||
You can also [create a PR](#contributing-code) fixing it yourself, or course.
|
You can also [create a PR](#contributing-code) fixing it yourself of course.
|
||||||
|
|
||||||
If you report a bug, please follow these guidelines:
|
If you report a bug, please follow these guidelines:
|
||||||
|
|
||||||
@ -67,7 +65,7 @@ If you report a bug, please follow these guidelines:
|
|||||||
|
|
||||||
For small documentation changes, you can use [Github's editing feature](https://help.github.com/articles/editing-files-in-another-user-s-repository/).
|
For small documentation changes, you can use [Github's editing feature](https://help.github.com/articles/editing-files-in-another-user-s-repository/).
|
||||||
The only thing to keep in mind is to prefix the commit message with "docs: ".
|
The only thing to keep in mind is to prefix the commit message with "docs: ".
|
||||||
The detault commit message generated by Github will lead to a failing CI build.
|
The default commit message generated by Github will lead to a failing CI build.
|
||||||
|
|
||||||
For larger updates to the documentation
|
For larger updates to the documentation
|
||||||
it might be better to follow the [instructions for contributing code below](#contributing-code).
|
it might be better to follow the [instructions for contributing code below](#contributing-code).
|
||||||
|
5
deps/node-inspect/GOVERNANCE.md
vendored
5
deps/node-inspect/GOVERNANCE.md
vendored
@ -1,5 +1,4 @@
|
|||||||
# node-inspect Project Governance
|
# node-inspect Project Governance
|
||||||
|
|
||||||
The node-inspect project falls under the governance of the diagnostics
|
The node-inspect project is governed by the Node.js Diagnostics WG as described
|
||||||
working group which is documented in:
|
at <https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md>.
|
||||||
https://github.com/nodejs/diagnostics/blob/master/GOVERNANCE.md.
|
|
||||||
|
1
deps/node-inspect/examples/alive.js
vendored
1
deps/node-inspect/examples/alive.js
vendored
@ -1,4 +1,3 @@
|
|||||||
'use strict';
|
|
||||||
let x = 0;
|
let x = 0;
|
||||||
function heartbeat() {
|
function heartbeat() {
|
||||||
++x;
|
++x;
|
||||||
|
1
deps/node-inspect/examples/backtrace.js
vendored
1
deps/node-inspect/examples/backtrace.js
vendored
@ -1,4 +1,3 @@
|
|||||||
'use strict';
|
|
||||||
const { exports: moduleScoped } = module;
|
const { exports: moduleScoped } = module;
|
||||||
|
|
||||||
function topFn(a, b = false) {
|
function topFn(a, b = false) {
|
||||||
|
4
deps/node-inspect/examples/cjs/index.js
vendored
4
deps/node-inspect/examples/cjs/index.js
vendored
@ -1,5 +1,5 @@
|
|||||||
'use strict';
|
const fourty = 40;
|
||||||
const { add } = require('./other');
|
const { add } = require('./other');
|
||||||
|
|
||||||
const sum = add(40, 2);
|
const sum = add(fourty, 2);
|
||||||
module.exports = sum;
|
module.exports = sum;
|
||||||
|
1
deps/node-inspect/examples/cjs/other.js
vendored
1
deps/node-inspect/examples/cjs/other.js
vendored
@ -1,4 +1,3 @@
|
|||||||
'use strict';
|
|
||||||
exports.add = function add(a, b) {
|
exports.add = function add(a, b) {
|
||||||
return a + b;
|
return a + b;
|
||||||
};
|
};
|
||||||
|
1
deps/node-inspect/examples/exceptions.js
vendored
1
deps/node-inspect/examples/exceptions.js
vendored
@ -1,4 +1,3 @@
|
|||||||
'use strict';
|
|
||||||
let error = null;
|
let error = null;
|
||||||
try {
|
try {
|
||||||
throw new Error('Caught');
|
throw new Error('Caught');
|
||||||
|
1
deps/node-inspect/examples/three-lines.js
vendored
1
deps/node-inspect/examples/three-lines.js
vendored
@ -1,4 +1,3 @@
|
|||||||
'use strict';
|
|
||||||
let x = 1;
|
let x = 1;
|
||||||
x = x + 1;
|
x = x + 1;
|
||||||
module.exports = x;
|
module.exports = x;
|
||||||
|
2
deps/node-inspect/examples/use-strict.js
vendored
Normal file
2
deps/node-inspect/examples/use-strict.js
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
'use strict';
|
||||||
|
console.log('first real line');
|
91
deps/node-inspect/lib/_inspect.js
vendored
91
deps/node-inspect/lib/_inspect.js
vendored
@ -22,10 +22,13 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
const { spawn } = require('child_process');
|
const { spawn } = require('child_process');
|
||||||
const { EventEmitter } = require('events');
|
const { EventEmitter } = require('events');
|
||||||
|
const net = require('net');
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
|
|
||||||
|
const runAsStandalone = typeof __dirname !== 'undefined';
|
||||||
|
|
||||||
const [ InspectClient, createRepl ] =
|
const [ InspectClient, createRepl ] =
|
||||||
(typeof __dirname !== 'undefined') ?
|
runAsStandalone ?
|
||||||
// This copy of node-inspect is on-disk, relative paths make sense.
|
// This copy of node-inspect is on-disk, relative paths make sense.
|
||||||
[
|
[
|
||||||
require('./internal/inspect_client'),
|
require('./internal/inspect_client'),
|
||||||
@ -39,7 +42,16 @@ const [ InspectClient, createRepl ] =
|
|||||||
|
|
||||||
const debuglog = util.debuglog('inspect');
|
const debuglog = util.debuglog('inspect');
|
||||||
|
|
||||||
exports.port = 9229;
|
const DEBUG_PORT_PATTERN = /^--(?:debug|inspect)-port=(\d+)$/;
|
||||||
|
function getDefaultPort() {
|
||||||
|
for (const arg of process.execArgv) {
|
||||||
|
const match = arg.match(DEBUG_PORT_PATTERN);
|
||||||
|
if (match) {
|
||||||
|
return +match[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 9229;
|
||||||
|
}
|
||||||
|
|
||||||
function runScript(script, scriptArgs, inspectPort, childPrint) {
|
function runScript(script, scriptArgs, inspectPort, childPrint) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
@ -88,6 +100,45 @@ function createAgentProxy(domain, client) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function portIsFree(host, port, timeout = 2000) {
|
||||||
|
const retryDelay = 150;
|
||||||
|
let didTimeOut = false;
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
didTimeOut = true;
|
||||||
|
reject(new Error(
|
||||||
|
`Timeout (${timeout}) waiting for ${host}:${port} to be free`));
|
||||||
|
}, timeout);
|
||||||
|
|
||||||
|
function pingPort() {
|
||||||
|
if (didTimeOut) return;
|
||||||
|
|
||||||
|
const socket = net.connect(port, host);
|
||||||
|
let didRetry = false;
|
||||||
|
function retry() {
|
||||||
|
if (!didRetry && !didTimeOut) {
|
||||||
|
didRetry = true;
|
||||||
|
setTimeout(pingPort, retryDelay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.on('error', (error) => {
|
||||||
|
if (error.code === 'ECONNREFUSED') {
|
||||||
|
resolve();
|
||||||
|
} else {
|
||||||
|
retry();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.on('connect', () => {
|
||||||
|
socket.destroy();
|
||||||
|
retry();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
pingPort();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
class NodeInspector {
|
class NodeInspector {
|
||||||
constructor(options, stdin, stdout) {
|
constructor(options, stdin, stdout) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
@ -128,8 +179,9 @@ class NodeInspector {
|
|||||||
process.once('SIGHUP', process.exit.bind(process, 0));
|
process.once('SIGHUP', process.exit.bind(process, 0));
|
||||||
|
|
||||||
this.run()
|
this.run()
|
||||||
.then(() => {
|
.then(() => startRepl())
|
||||||
this.repl = startRepl();
|
.then((repl) => {
|
||||||
|
this.repl = repl;
|
||||||
this.repl.on('exit', () => {
|
this.repl.on('exit', () => {
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
});
|
});
|
||||||
@ -139,15 +191,19 @@ class NodeInspector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspendReplWhile(fn) {
|
suspendReplWhile(fn) {
|
||||||
this.repl.rli.pause();
|
if (this.repl) {
|
||||||
|
this.repl.rli.pause();
|
||||||
|
}
|
||||||
this.stdin.pause();
|
this.stdin.pause();
|
||||||
this.paused = true;
|
this.paused = true;
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
resolve(fn());
|
resolve(fn());
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.paused = false;
|
this.paused = false;
|
||||||
this.repl.rli.resume();
|
if (this.repl) {
|
||||||
this.repl.displayPrompt();
|
this.repl.rli.resume();
|
||||||
|
this.repl.displayPrompt();
|
||||||
|
}
|
||||||
this.stdin.resume();
|
this.stdin.resume();
|
||||||
}).then(null, (error) => process.nextTick(() => { throw error; }));
|
}).then(null, (error) => process.nextTick(() => { throw error; }));
|
||||||
}
|
}
|
||||||
@ -162,7 +218,14 @@ class NodeInspector {
|
|||||||
|
|
||||||
run() {
|
run() {
|
||||||
this.killChild();
|
this.killChild();
|
||||||
return this._runScript().then((child) => {
|
const { host, port } = this.options;
|
||||||
|
|
||||||
|
const runOncePortIsFree = () => {
|
||||||
|
return portIsFree(host, port)
|
||||||
|
.then(() => this._runScript());
|
||||||
|
};
|
||||||
|
|
||||||
|
return runOncePortIsFree().then((child) => {
|
||||||
this.child = child;
|
this.child = child;
|
||||||
|
|
||||||
let connectionAttempts = 0;
|
let connectionAttempts = 0;
|
||||||
@ -173,6 +236,7 @@ class NodeInspector {
|
|||||||
return this.client.connect()
|
return this.client.connect()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
debuglog('connection established');
|
debuglog('connection established');
|
||||||
|
this.stdout.write(' ok');
|
||||||
}, (error) => {
|
}, (error) => {
|
||||||
debuglog('connect failed', error);
|
debuglog('connect failed', error);
|
||||||
// If it's failed to connect 10 times then print failed message
|
// If it's failed to connect 10 times then print failed message
|
||||||
@ -186,7 +250,6 @@ class NodeInspector {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const { host, port } = this.options;
|
|
||||||
this.print(`connecting to ${host}:${port} ..`, true);
|
this.print(`connecting to ${host}:${port} ..`, true);
|
||||||
return attemptConnect();
|
return attemptConnect();
|
||||||
});
|
});
|
||||||
@ -225,7 +288,7 @@ class NodeInspector {
|
|||||||
|
|
||||||
function parseArgv([target, ...args]) {
|
function parseArgv([target, ...args]) {
|
||||||
let host = '127.0.0.1';
|
let host = '127.0.0.1';
|
||||||
let port = exports.port;
|
let port = getDefaultPort();
|
||||||
let isRemote = false;
|
let isRemote = false;
|
||||||
let script = target;
|
let script = target;
|
||||||
let scriptArgs = args;
|
let scriptArgs = args;
|
||||||
@ -258,8 +321,12 @@ function startInspect(argv = process.argv.slice(2),
|
|||||||
stdout = process.stdout) {
|
stdout = process.stdout) {
|
||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
if (argv.length < 1) {
|
if (argv.length < 1) {
|
||||||
console.error('Usage: node-inspect script.js');
|
const invokedAs = runAsStandalone ?
|
||||||
console.error(' node-inspect <host>:<port>');
|
'node-inspect' :
|
||||||
|
`${process.argv0} ${process.argv[1]}`;
|
||||||
|
|
||||||
|
console.error(`Usage: ${invokedAs} script.js`);
|
||||||
|
console.error(` ${invokedAs} <host>:<port>`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
deps/node-inspect/lib/internal/inspect_client.js
vendored
15
deps/node-inspect/lib/internal/inspect_client.js
vendored
@ -334,20 +334,7 @@ class Client extends EventEmitter {
|
|||||||
this.emit('close');
|
this.emit('close');
|
||||||
});
|
});
|
||||||
|
|
||||||
Promise.all([
|
this.emit('ready');
|
||||||
this.callMethod('Runtime.enable'),
|
|
||||||
this.callMethod('Debugger.enable'),
|
|
||||||
this.callMethod('Debugger.setPauseOnExceptions', { state: 'none' }),
|
|
||||||
this.callMethod('Debugger.setAsyncCallStackDepth', { maxDepth: 0 }),
|
|
||||||
this.callMethod('Profiler.enable'),
|
|
||||||
this.callMethod('Profiler.setSamplingInterval', { interval: 100 }),
|
|
||||||
this.callMethod('Debugger.setBlackboxPatterns', { patterns: [] }),
|
|
||||||
this.callMethod('Runtime.runIfWaitingForDebugger'),
|
|
||||||
]).then(() => {
|
|
||||||
this.emit('ready');
|
|
||||||
}, (error) => {
|
|
||||||
this.emit('error', error);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
53
deps/node-inspect/lib/internal/inspect_repl.js
vendored
53
deps/node-inspect/lib/internal/inspect_repl.js
vendored
@ -234,10 +234,10 @@ class ScopeSnapshot {
|
|||||||
constructor(scope, properties) {
|
constructor(scope, properties) {
|
||||||
Object.assign(this, scope);
|
Object.assign(this, scope);
|
||||||
this.properties = new Map(properties.map((prop) => {
|
this.properties = new Map(properties.map((prop) => {
|
||||||
// console.error(prop);
|
|
||||||
const value = new RemoteObject(prop.value);
|
const value = new RemoteObject(prop.value);
|
||||||
return [prop.name, value];
|
return [prop.name, value];
|
||||||
}));
|
}));
|
||||||
|
this.completionGroup = properties.map((prop) => prop.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
[util.inspect.custom](depth, opts) {
|
[util.inspect.custom](depth, opts) {
|
||||||
@ -480,7 +480,9 @@ function createRepl(inspector) {
|
|||||||
if (!selectedFrame) {
|
if (!selectedFrame) {
|
||||||
return Promise.reject(new Error('Requires execution to be paused'));
|
return Promise.reject(new Error('Requires execution to be paused'));
|
||||||
}
|
}
|
||||||
return selectedFrame.loadScopes();
|
return selectedFrame.loadScopes().then((scopes) => {
|
||||||
|
return scopes.map((scope) => scope.completionGroup);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedFrame) {
|
if (selectedFrame) {
|
||||||
@ -746,8 +748,8 @@ function createRepl(inspector) {
|
|||||||
.filter(({ location }) => !!location.scriptUrl)
|
.filter(({ location }) => !!location.scriptUrl)
|
||||||
.map(({ location }) =>
|
.map(({ location }) =>
|
||||||
setBreakpoint(location.scriptUrl, location.lineNumber + 1));
|
setBreakpoint(location.scriptUrl, location.lineNumber + 1));
|
||||||
if (!newBreakpoints.length) return;
|
if (!newBreakpoints.length) return Promise.resolve();
|
||||||
Promise.all(newBreakpoints).then((results) => {
|
return Promise.all(newBreakpoints).then((results) => {
|
||||||
print(`${results.length} breakpoints restored.`);
|
print(`${results.length} breakpoints restored.`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -768,7 +770,8 @@ function createRepl(inspector) {
|
|||||||
const breakType = reason === 'other' ? 'break' : reason;
|
const breakType = reason === 'other' ? 'break' : reason;
|
||||||
const script = knownScripts[scriptId];
|
const script = knownScripts[scriptId];
|
||||||
const scriptUrl = script ? getRelativePath(script.url) : '[unknown]';
|
const scriptUrl = script ? getRelativePath(script.url) : '[unknown]';
|
||||||
print(`${breakType} in ${scriptUrl}:${lineNumber + 1}`);
|
|
||||||
|
const header = `${breakType} in ${scriptUrl}:${lineNumber + 1}`;
|
||||||
|
|
||||||
inspector.suspendReplWhile(() =>
|
inspector.suspendReplWhile(() =>
|
||||||
Promise.all([formatWatchers(true), selectedFrame.list(2)])
|
Promise.all([formatWatchers(true), selectedFrame.list(2)])
|
||||||
@ -776,8 +779,10 @@ function createRepl(inspector) {
|
|||||||
if (watcherList) {
|
if (watcherList) {
|
||||||
return `${watcherList}\n${inspect(context)}`;
|
return `${watcherList}\n${inspect(context)}`;
|
||||||
}
|
}
|
||||||
return context;
|
return inspect(context);
|
||||||
}).then(print));
|
}).then((breakContext) => {
|
||||||
|
print(`${header}\n${breakContext}`);
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
function handleResumed() {
|
function handleResumed() {
|
||||||
@ -1024,7 +1029,30 @@ function createRepl(inspector) {
|
|||||||
aliasProperties(context, SHORTCUTS);
|
aliasProperties(context, SHORTCUTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initAfterStart() {
|
||||||
|
const setupTasks = [
|
||||||
|
Runtime.enable(),
|
||||||
|
Profiler.enable(),
|
||||||
|
Profiler.setSamplingInterval({ interval: 100 }),
|
||||||
|
Debugger.enable(),
|
||||||
|
Debugger.setPauseOnExceptions({ state: 'none' }),
|
||||||
|
Debugger.setAsyncCallStackDepth({ maxDepth: 0 }),
|
||||||
|
Debugger.setBlackboxPatterns({ patterns: [] }),
|
||||||
|
Debugger.setPauseOnExceptions({ state: pauseOnExceptionState }),
|
||||||
|
restoreBreakpoints(),
|
||||||
|
Runtime.runIfWaitingForDebugger(),
|
||||||
|
];
|
||||||
|
return Promise.all(setupTasks);
|
||||||
|
}
|
||||||
|
|
||||||
return function startRepl() {
|
return function startRepl() {
|
||||||
|
inspector.client.on('close', () => {
|
||||||
|
resetOnStart();
|
||||||
|
});
|
||||||
|
inspector.client.on('ready', () => {
|
||||||
|
initAfterStart();
|
||||||
|
});
|
||||||
|
|
||||||
const replOptions = {
|
const replOptions = {
|
||||||
prompt: 'debug> ',
|
prompt: 'debug> ',
|
||||||
input: inspector.stdin,
|
input: inspector.stdin,
|
||||||
@ -1033,6 +1061,7 @@ function createRepl(inspector) {
|
|||||||
useGlobal: false,
|
useGlobal: false,
|
||||||
ignoreUndefined: true,
|
ignoreUndefined: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
repl = Repl.start(replOptions); // eslint-disable-line prefer-const
|
repl = Repl.start(replOptions); // eslint-disable-line prefer-const
|
||||||
initializeContext(repl.context);
|
initializeContext(repl.context);
|
||||||
repl.on('reset', initializeContext);
|
repl.on('reset', initializeContext);
|
||||||
@ -1042,14 +1071,8 @@ function createRepl(inspector) {
|
|||||||
repl.rli.emit('SIGINT');
|
repl.rli.emit('SIGINT');
|
||||||
});
|
});
|
||||||
|
|
||||||
inspector.client.on('close', () => {
|
// Init once for the initial connection
|
||||||
resetOnStart();
|
initAfterStart();
|
||||||
});
|
|
||||||
|
|
||||||
inspector.client.on('ready', () => {
|
|
||||||
restoreBreakpoints();
|
|
||||||
Debugger.setPauseOnExceptions({ state: pauseOnExceptionState });
|
|
||||||
});
|
|
||||||
|
|
||||||
return repl;
|
return repl;
|
||||||
};
|
};
|
||||||
|
8
deps/node-inspect/package.json
vendored
8
deps/node-inspect/package.json
vendored
@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "node-inspect",
|
"name": "node-inspect",
|
||||||
"version": "1.10.4",
|
"version": "1.10.6",
|
||||||
"description": "Node Inspect",
|
"description": "Node Inspect",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "lib/_inspect.js",
|
"main": "lib/_inspect.js",
|
||||||
"bin": "cli.js",
|
"bin": "cli.js",
|
||||||
"homepage": "https://github.com/buggerjs/node-inspect",
|
"homepage": "https://github.com/nodejs/node-inspect",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+ssh://git@github.com/buggerjs/node-inspect"
|
"url": "git+ssh://git@github.com/nodejs/node-inspect"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/buggerjs/node-inspect/issues"
|
"url": "https://github.com/nodejs/node-inspect/issues"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pretest": "eslint --rulesdir=tools/eslint-rules lib test",
|
"pretest": "eslint --rulesdir=tools/eslint-rules lib test",
|
||||||
|
4
deps/node-inspect/test/cli/backtrace.test.js
vendored
4
deps/node-inspect/test/cli/backtrace.test.js
vendored
@ -19,11 +19,11 @@ test('display and navigate backtrace', (t) => {
|
|||||||
.then(() => cli.stepCommand('c'))
|
.then(() => cli.stepCommand('c'))
|
||||||
.then(() => cli.command('bt'))
|
.then(() => cli.command('bt'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
t.match(cli.output, `#0 topFn ${script}:8:2`);
|
t.match(cli.output, `#0 topFn ${script}:7:2`);
|
||||||
})
|
})
|
||||||
.then(() => cli.command('backtrace'))
|
.then(() => cli.command('backtrace'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
t.match(cli.output, `#0 topFn ${script}:8:2`);
|
t.match(cli.output, `#0 topFn ${script}:7:2`);
|
||||||
})
|
})
|
||||||
.then(() => cli.quit())
|
.then(() => cli.quit())
|
||||||
.then(null, onFatal);
|
.then(null, onFatal);
|
||||||
|
@ -31,11 +31,11 @@ test('break on (uncaught) exceptions', (t) => {
|
|||||||
.then(() => cli.command('breakOnException'))
|
.then(() => cli.command('breakOnException'))
|
||||||
.then(() => cli.stepCommand('c'))
|
.then(() => cli.stepCommand('c'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
t.match(cli.output, `exception in ${script}:4`);
|
t.match(cli.output, `exception in ${script}:3`);
|
||||||
})
|
})
|
||||||
.then(() => cli.stepCommand('c'))
|
.then(() => cli.stepCommand('c'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
t.match(cli.output, `exception in ${script}:10`);
|
t.match(cli.output, `exception in ${script}:9`);
|
||||||
})
|
})
|
||||||
|
|
||||||
// Next run: With `breakOnUncaught` it only pauses on the 2nd exception
|
// Next run: With `breakOnUncaught` it only pauses on the 2nd exception
|
||||||
@ -46,7 +46,7 @@ test('break on (uncaught) exceptions', (t) => {
|
|||||||
})
|
})
|
||||||
.then(() => cli.stepCommand('c'))
|
.then(() => cli.stepCommand('c'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
t.match(cli.output, `exception in ${script}:10`);
|
t.match(cli.output, `exception in ${script}:9`);
|
||||||
})
|
})
|
||||||
|
|
||||||
// Next run: Back to the initial state! It should die again.
|
// Next run: Back to the initial state! It should die again.
|
||||||
|
4
deps/node-inspect/test/cli/launch.test.js
vendored
4
deps/node-inspect/test/cli/launch.test.js
vendored
@ -8,7 +8,9 @@ const startCLI = require('./start-cli');
|
|||||||
test('examples/empty.js', (t) => {
|
test('examples/empty.js', (t) => {
|
||||||
const script = Path.join('examples', 'empty.js');
|
const script = Path.join('examples', 'empty.js');
|
||||||
const cli = startCLI([script]);
|
const cli = startCLI([script]);
|
||||||
return cli.waitForPrompt()
|
|
||||||
|
return cli.waitFor(/break/)
|
||||||
|
.then(() => cli.waitForPrompt())
|
||||||
.then(() => {
|
.then(() => {
|
||||||
t.match(cli.output, 'debug>', 'prints a prompt');
|
t.match(cli.output, 'debug>', 'prints a prompt');
|
||||||
t.match(
|
t.match(
|
||||||
|
@ -48,8 +48,17 @@ test('run after quit / restart', (t) => {
|
|||||||
})
|
})
|
||||||
.then(() => cli.command('breakpoints'))
|
.then(() => cli.command('breakpoints'))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
t.match(cli.output, `#0 ${script}:2`);
|
if (process.platform === 'aix') {
|
||||||
t.match(cli.output, `#1 ${script}:3`);
|
// TODO: There is a known issue on AIX where the breakpoints aren't
|
||||||
|
// properly resolved yet when we reach this point.
|
||||||
|
// Eventually that should be figured out but for now we don't want
|
||||||
|
// to fail builds because of it.
|
||||||
|
t.match(cli.output, /#0 [^\n]+three-lines\.js\$?:2/);
|
||||||
|
t.match(cli.output, /#1 [^\n]+three-lines\.js\$?:3/);
|
||||||
|
} else {
|
||||||
|
t.match(cli.output, `#0 ${script}:2`);
|
||||||
|
t.match(cli.output, `#1 ${script}:3`);
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.then(() => cli.quit())
|
.then(() => cli.quit())
|
||||||
.then(null, onFatal);
|
.then(null, onFatal);
|
||||||
|
27
deps/node-inspect/test/cli/use-strict.test.js
vendored
Normal file
27
deps/node-inspect/test/cli/use-strict.test.js
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
'use strict';
|
||||||
|
const Path = require('path');
|
||||||
|
|
||||||
|
const { test } = require('tap');
|
||||||
|
|
||||||
|
const startCLI = require('./start-cli');
|
||||||
|
|
||||||
|
test('for whiles that starts with strict directive', (t) => {
|
||||||
|
const script = Path.join('examples', 'use-strict.js');
|
||||||
|
const cli = startCLI([script]);
|
||||||
|
|
||||||
|
function onFatal(error) {
|
||||||
|
cli.quit();
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cli.waitFor(/break/)
|
||||||
|
.then(() => cli.waitForPrompt())
|
||||||
|
.then(() => {
|
||||||
|
t.match(
|
||||||
|
cli.output,
|
||||||
|
/break in [^:]+:(?:1|2)[^\d]/,
|
||||||
|
'pauses either on strict directive or first "real" line');
|
||||||
|
})
|
||||||
|
.then(() => cli.quit())
|
||||||
|
.then(null, onFatal);
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user