Skip to content

Commit

Permalink
inspector: expose inspector.close on workers
Browse files Browse the repository at this point in the history
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: nodejs/node#44489
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information
legendecas authored and guangwong committed Jan 3, 2023
1 parent 0ebc683 commit 70e05b4
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 5 deletions.
3 changes: 0 additions & 3 deletions doc/api/inspector.md
Expand Up @@ -19,8 +19,6 @@ const inspector = require('node:inspector');

Deactivate the inspector. Blocks until there are no active connections.

This function is not available in [worker threads][].

## `inspector.console`

* {Object} An object to send messages to the remote inspector console.
Expand Down Expand Up @@ -256,4 +254,3 @@ session.post('HeapProfiler.takeHeapSnapshot', null, (err, r) => {
[`'Debugger.paused'`]: https://chromedevtools.github.io/devtools-protocol/v8/Debugger#event-paused
[`session.connect()`]: #sessionconnect
[security warning]: cli.md#warning-binding-inspector-to-a-public-ipport-combination-is-insecure
[worker threads]: worker_threads.md
3 changes: 2 additions & 1 deletion lib/inspector.js
Expand Up @@ -32,6 +32,7 @@ const {
validateString,
} = require('internal/validators');
const { isMainThread } = require('worker_threads');
const { _debugEnd } = internalBinding('process_methods');

const {
Connection,
Expand Down Expand Up @@ -194,7 +195,7 @@ function inspectorWaitForDebugger() {

module.exports = {
open: inspectorOpen,
close: process._debugEnd,
close: _debugEnd,
url,
waitForDebugger: inspectorWaitForDebugger,
// This is dynamically added during bootstrap,
Expand Down
2 changes: 1 addition & 1 deletion src/node_process_methods.cc
Expand Up @@ -563,7 +563,6 @@ static void Initialize(Local<Object> target,
// define various internal methods
if (env->owns_process_state()) {
env->SetMethod(target, "_debugProcess", DebugProcess);
env->SetMethod(target, "_debugEnd", DebugEnd);
env->SetMethod(target, "abort", Abort);
env->SetMethod(target, "causeSegfault", CauseSegfault);
env->SetMethod(target, "chdir", Chdir);
Expand All @@ -576,6 +575,7 @@ static void Initialize(Local<Object> target,
env->SetMethod(target, "cpuUsage", CPUUsage);
env->SetMethod(target, "resourceUsage", ResourceUsage);

env->SetMethod(target, "_debugEnd", DebugEnd);
env->SetMethod(target, "_getActiveRequests", GetActiveRequests);
env->SetMethod(target, "_getActiveRequestsInfo", GetActiveRequestsInfo);
env->SetMethod(target, "_getActiveHandles", GetActiveHandles);
Expand Down
34 changes: 34 additions & 0 deletions test/parallel/test-inspector-close-worker.js
@@ -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);
}));

0 comments on commit 70e05b4

Please sign in to comment.