inspector: expose inspector.close on workers
Workers can open their own inspector agent with `inspector.open`. They should be able to close their own inspector agent too with `inspector.close`. PR-URL: https://github.com/nodejs/node/pull/44489 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
f691bf5af5
commit
050a1451e9
@ -19,8 +19,6 @@ const inspector = require('node:inspector');
|
|||||||
|
|
||||||
Deactivate the inspector. Blocks until there are no active connections.
|
Deactivate the inspector. Blocks until there are no active connections.
|
||||||
|
|
||||||
This function is not available in [worker threads][].
|
|
||||||
|
|
||||||
## `inspector.console`
|
## `inspector.console`
|
||||||
|
|
||||||
* {Object} An object to send messages to the remote inspector console.
|
* {Object} An object to send messages to the remote inspector console.
|
||||||
@ -262,4 +260,3 @@ session.post('HeapProfiler.takeHeapSnapshot', null, (err, r) => {
|
|||||||
[`'Debugger.paused'`]: https://chromedevtools.github.io/devtools-protocol/v8/Debugger#event-paused
|
[`'Debugger.paused'`]: https://chromedevtools.github.io/devtools-protocol/v8/Debugger#event-paused
|
||||||
[`session.connect()`]: #sessionconnect
|
[`session.connect()`]: #sessionconnect
|
||||||
[security warning]: cli.md#warning-binding-inspector-to-a-public-ipport-combination-is-insecure
|
[security warning]: cli.md#warning-binding-inspector-to-a-public-ipport-combination-is-insecure
|
||||||
[worker threads]: worker_threads.md
|
|
||||||
|
@ -32,6 +32,7 @@ const {
|
|||||||
validateString,
|
validateString,
|
||||||
} = require('internal/validators');
|
} = require('internal/validators');
|
||||||
const { isMainThread } = require('worker_threads');
|
const { isMainThread } = require('worker_threads');
|
||||||
|
const { _debugEnd } = internalBinding('process_methods');
|
||||||
|
|
||||||
const {
|
const {
|
||||||
Connection,
|
Connection,
|
||||||
@ -195,7 +196,7 @@ function inspectorWaitForDebugger() {
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
open: inspectorOpen,
|
open: inspectorOpen,
|
||||||
close: process._debugEnd,
|
close: _debugEnd,
|
||||||
url,
|
url,
|
||||||
waitForDebugger: inspectorWaitForDebugger,
|
waitForDebugger: inspectorWaitForDebugger,
|
||||||
console,
|
console,
|
||||||
|
@ -566,24 +566,24 @@ static void Initialize(Local<Object> target,
|
|||||||
// define various internal methods
|
// define various internal methods
|
||||||
if (env->owns_process_state()) {
|
if (env->owns_process_state()) {
|
||||||
SetMethod(context, target, "_debugProcess", DebugProcess);
|
SetMethod(context, target, "_debugProcess", DebugProcess);
|
||||||
SetMethod(context, target, "_debugEnd", DebugEnd);
|
|
||||||
SetMethod(context, target, "abort", Abort);
|
SetMethod(context, target, "abort", Abort);
|
||||||
SetMethod(context, target, "causeSegfault", CauseSegfault);
|
SetMethod(context, target, "causeSegfault", CauseSegfault);
|
||||||
SetMethod(context, target, "chdir", Chdir);
|
SetMethod(context, target, "chdir", Chdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetMethod(context, target, "umask", Umask);
|
SetMethod(context, target, "umask", Umask);
|
||||||
SetMethod(context, target, "_rawDebug", RawDebug);
|
|
||||||
SetMethod(context, target, "memoryUsage", MemoryUsage);
|
SetMethod(context, target, "memoryUsage", MemoryUsage);
|
||||||
SetMethod(context, target, "rss", Rss);
|
SetMethod(context, target, "rss", Rss);
|
||||||
SetMethod(context, target, "cpuUsage", CPUUsage);
|
SetMethod(context, target, "cpuUsage", CPUUsage);
|
||||||
SetMethod(context, target, "resourceUsage", ResourceUsage);
|
SetMethod(context, target, "resourceUsage", ResourceUsage);
|
||||||
|
|
||||||
|
SetMethod(context, target, "_debugEnd", DebugEnd);
|
||||||
SetMethod(context, target, "_getActiveRequestsInfo", GetActiveRequestsInfo);
|
SetMethod(context, target, "_getActiveRequestsInfo", GetActiveRequestsInfo);
|
||||||
SetMethod(context, target, "_getActiveRequests", GetActiveRequests);
|
SetMethod(context, target, "_getActiveRequests", GetActiveRequests);
|
||||||
SetMethod(context, target, "_getActiveHandles", GetActiveHandles);
|
SetMethod(context, target, "_getActiveHandles", GetActiveHandles);
|
||||||
SetMethod(context, target, "_getActiveHandlesInfo", GetActiveHandlesInfo);
|
SetMethod(context, target, "_getActiveHandlesInfo", GetActiveHandlesInfo);
|
||||||
SetMethod(context, target, "_kill", Kill);
|
SetMethod(context, target, "_kill", Kill);
|
||||||
|
SetMethod(context, target, "_rawDebug", RawDebug);
|
||||||
|
|
||||||
SetMethodNoSideEffect(context, target, "cwd", Cwd);
|
SetMethodNoSideEffect(context, target, "cwd", Cwd);
|
||||||
SetMethod(context, target, "dlopen", binding::DLOpen);
|
SetMethod(context, target, "dlopen", binding::DLOpen);
|
||||||
|
34
test/parallel/test-inspector-close-worker.js
Normal file
34
test/parallel/test-inspector-close-worker.js
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
common.skipIfInspectorDisabled();
|
||||||
|
const { isMainThread, Worker } = require('worker_threads');
|
||||||
|
const assert = require('assert');
|
||||||
|
const inspector = require('inspector');
|
||||||
|
|
||||||
|
if (!isMainThread) {
|
||||||
|
// Verify the inspector api on the worker thread.
|
||||||
|
assert.strictEqual(inspector.url(), undefined);
|
||||||
|
|
||||||
|
inspector.open(0, undefined, false);
|
||||||
|
const wsUrl = inspector.url();
|
||||||
|
assert(wsUrl.startsWith('ws://'));
|
||||||
|
inspector.close();
|
||||||
|
assert.strictEqual(inspector.url(), undefined);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open inspector on the main thread first.
|
||||||
|
inspector.open(0, undefined, false);
|
||||||
|
const wsUrl = inspector.url();
|
||||||
|
assert(wsUrl.startsWith('ws://'));
|
||||||
|
|
||||||
|
const worker = new Worker(__filename);
|
||||||
|
worker.on('exit', common.mustCall((code) => {
|
||||||
|
assert.strictEqual(code, 0);
|
||||||
|
|
||||||
|
// Verify inspector on the main thread is still active.
|
||||||
|
assert.strictEqual(inspector.url(), wsUrl);
|
||||||
|
inspector.close();
|
||||||
|
assert.strictEqual(inspector.url(), undefined);
|
||||||
|
}));
|
Loading…
x
Reference in New Issue
Block a user