Skip to content
Permalink
Browse files

process: expose process.features.inspector

Instead of using process.config.variables.v8_enable_inspector
to detect whether inspector is enabled in the build.

PR-URL: #25819
Refs: #25343
Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information...
joyeecheung authored and targos committed Jan 30, 2019
1 parent 92ca506 commit 1d76ba1b3deaeda6b4dbf3f3f224128ee2f77460
@@ -292,12 +292,13 @@ process.assert = deprecate(

// TODO(joyeecheung): this property has not been well-maintained, should we
// deprecate it in favor of a better API?
const { isDebugBuild, hasOpenSSL } = config;
const { isDebugBuild, hasOpenSSL, hasInspector } = config;
Object.defineProperty(process, 'features', {
enumerable: true,
writable: false,
configurable: false,
value: {
inspector: hasInspector,
debug: isDebugBuild,
uv: true,
ipv6: true, // TODO(bnoordhuis) ping libuv
@@ -3,8 +3,8 @@
let session;
function sendInspectorCommand(cb, onError) {
const { hasInspector } = internalBinding('config');
const inspector = hasInspector ? require('inspector') : undefined;
if (!hasInspector) return onError();
const inspector = require('inspector');
if (session === undefined) session = new inspector.Session();
try {
session.connect();
@@ -57,12 +57,6 @@ static void Initialize(Local<Object> target,
READONLY_TRUE_PROPERTY(target, "hasTracing");
#endif

#if HAVE_INSPECTOR
READONLY_TRUE_PROPERTY(target, "hasInspector");
#else
READONLY_FALSE_PROPERTY(target, "hasInspector");
#endif

#if !defined(NODE_WITHOUT_NODE_OPTIONS)
READONLY_TRUE_PROPERTY(target, "hasNodeOptions");
#endif
@@ -73,6 +67,12 @@ static void Initialize(Local<Object> target,

#endif // NODE_HAVE_I18N_SUPPORT

#if HAVE_INSPECTOR
READONLY_TRUE_PROPERTY(target, "hasInspector");
#else
READONLY_FALSE_PROPERTY(target, "hasInspector");
#endif

READONLY_PROPERTY(target,
"bits",
Number::New(env->isolate(), 8 * sizeof(intptr_t)));
@@ -80,8 +80,7 @@ if (process.argv.length === 2 &&
hasCrypto &&
// If the binary is build without `intl` the inspect option is
// invalid. The test itself should handle this case.
(process.config.variables.v8_enable_inspector !== 0 ||
!flag.startsWith('--inspect'))) {
(process.features.inspector || !flag.startsWith('--inspect'))) {
throw new Error(`Test has to be started with the flag: '${flag}'`);
}
}
@@ -629,7 +628,7 @@ function expectsError(fn, settings, exact) {
}

function skipIfInspectorDisabled() {
if (process.config.variables.v8_enable_inspector === 0) {
if (!process.features.inspector) {
skip('V8 inspector is disabled');
}
}
@@ -13,7 +13,7 @@ const assert = require('assert');

// This following check should be replaced by common.skipIfInspectorDisabled()
// if moved out of the known_issues directory.
if (process.config.variables.v8_enable_inspector === 0) {
if (!process.features.inspector) {
// When the V8 inspector is disabled, using either --without-inspector or
// --without-ssl, this test will not fail which it is expected to do.
// The following fail will allow this test to be skipped by failing it.
@@ -6,7 +6,7 @@ require('../common');
const assert = require('assert');
const spawn = require('child_process').spawnSync;

if (process.config.variables.v8_enable_inspector === 1) {
if (process.features.inspector) {
requiresArgument('--inspect-port');
requiresArgument('--inspect-port=');
requiresArgument('--debug-port');
@@ -22,10 +22,9 @@ function startPrintHelpTest() {
}

function validateNodePrintHelp() {
const config = process.config;
const HAVE_OPENSSL = common.hasCrypto;
const NODE_HAVE_I18N_SUPPORT = common.hasIntl;
const HAVE_INSPECTOR = config.variables.v8_enable_inspector === 1;
const HAVE_INSPECTOR = process.features.inspector;

const cliHelpOptions = [
{ compileConstant: HAVE_OPENSSL,
@@ -5,7 +5,5 @@ require('../common');
const assert = require('assert');
const { builtinLibs } = require('internal/modules/cjs/helpers');

const hasInspector = process.config.variables.v8_enable_inspector === 1;

const expectedLibs = hasInspector ? 34 : 33;
const expectedLibs = process.features.inspector ? 34 : 33;
assert.strictEqual(builtinLibs.length, expectedLibs);
@@ -16,7 +16,7 @@ require('../common');
'r',
'--stack-trace-limit=100',
'--stack-trace-limit=-=xX_nodejs_Xx=-',
].concat(process.config.variables.v8_enable_inspector ? [
].concat(process.features.inspector ? [
'--inspect-brk',
'inspect-brk',
'--inspect_brk',
@@ -6,6 +6,7 @@ const assert = require('assert');
const keys = new Set(Object.keys(process.features));

assert.deepStrictEqual(keys, new Set([
'inspector',
'debug',
'uv',
'ipv6',
@@ -29,7 +29,7 @@ const {
} = require('../common/hijackstdio');
const assert = require('assert');
const fixtures = require('../common/fixtures');
const hasInspector = process.config.variables.v8_enable_inspector === 1;
const hasInspector = process.features.inspector;

if (!common.isMainThread)
common.skip('process.chdir is not available in Workers');
@@ -1,6 +1,6 @@
'use strict';

if (!process.config.variables.v8_enable_inspector) return;
if (!process.features.inspector) return;

const common = require('../common');
const assert = require('assert');
@@ -289,8 +289,7 @@ if (common.hasCrypto) { // eslint-disable-line node-core/crypto-check
testInitialized(req, 'SendWrap');
}

if (process.config.variables.v8_enable_inspector !== 0 &&
common.isMainThread) {
if (process.features.inspector && common.isMainThread) {
const binding = internalBinding('inspector');
const handle = new binding.Connection(() => {});
testInitialized(handle, 'Connection');
@@ -3,10 +3,10 @@

const common = require('../common');

// This is to ensure that the sendInspectorCommand function calls the error
// function if its called with the v8_enable_inspector is disabled
if (process.features.inspector) {
common.skip('V8 inspector is enabled');
}

process.config.variables.v8_enable_inspector = 0;
const inspector = require('internal/util/inspector');

inspector.sendInspectorCommand(
@@ -1661,8 +1661,8 @@ def Main():

# We want to skip the inspector tests if node was built without the inspector.
has_inspector = Execute([vm,
'-p', 'process.config.variables.v8_enable_inspector'], context)
if has_inspector.stdout.rstrip() == '0':
'-p', 'process.features.inspector'], context)
if has_inspector.stdout.rstrip() == 'false':
context.v8_enable_inspector = False

has_crypto = Execute([vm,

0 comments on commit 1d76ba1

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