diff --git a/lib/internal/bootstrap/loaders.js b/lib/internal/bootstrap/loaders.js index 4291092532ec94..de911eb841e7ed 100644 --- a/lib/internal/bootstrap/loaders.js +++ b/lib/internal/bootstrap/loaders.js @@ -40,7 +40,10 @@ 'use strict'; (function bootstrapInternalLoaders(process, getBinding, getLinkedBinding, - getInternalBinding) { + getInternalBinding, debugBreak) { + if (debugBreak) + debugger; // eslint-disable-line no-debugger + const { apply: ReflectApply, deleteProperty: ReflectDeleteProperty, diff --git a/src/node.cc b/src/node.cc index 661b75e61394e9..07262a51c37d1c 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2716,6 +2716,11 @@ void SetupProcessObject(Environment* env, "_breakFirstLine", True(env->isolate())); } + if (debug_options.break_node_first_line()) { + READONLY_DONT_ENUM_PROPERTY(process, + "_breakNodeFirstLine", True(env->isolate())); + } + // --inspect --debug-brk if (debug_options.deprecated_invocation()) { READONLY_DONT_ENUM_PROPERTY(process, @@ -2950,7 +2955,8 @@ void LoadEnvironment(Environment* env) { env->process_object(), get_binding_fn, get_linked_binding_fn, - get_internal_binding_fn + get_internal_binding_fn, + Boolean::New(env->isolate(), debug_options.break_node_first_line()) }; // Bootstrap internal loaders diff --git a/src/node_debug_options.cc b/src/node_debug_options.cc index 3ec773132047de..5fc29059ddc84f 100644 --- a/src/node_debug_options.cc +++ b/src/node_debug_options.cc @@ -58,6 +58,7 @@ DebugOptions::DebugOptions() : inspector_enabled_(false), deprecated_debug_(false), break_first_line_(false), + break_node_first_line_(false), host_name_("127.0.0.1"), port_(-1) { } bool DebugOptions::ParseOption(const char* argv0, const std::string& option) { @@ -90,6 +91,9 @@ bool DebugOptions::ParseOption(const char* argv0, const std::string& option) { } else if (option_name == "--inspect-brk") { inspector_enabled_ = true; break_first_line_ = true; + } else if (option_name == "--inspect-brk-node") { + inspector_enabled_ = true; + break_node_first_line_ = true; } else if (option_name == "--debug-brk") { break_first_line_ = true; deprecated_debug_ = true; diff --git a/src/node_debug_options.h b/src/node_debug_options.h index 99364f40989f6a..98922ab099ac77 100644 --- a/src/node_debug_options.h +++ b/src/node_debug_options.h @@ -19,16 +19,20 @@ class DebugOptions { bool invalid_invocation() const { return deprecated_debug_ && !inspector_enabled_; } - bool wait_for_connect() const { return break_first_line_; } + bool wait_for_connect() const { + return break_first_line_ || break_node_first_line_; + } std::string host_name() const { return host_name_; } void set_host_name(std::string host_name) { host_name_ = host_name; } int port() const; void set_port(int port) { port_ = port; } + bool break_node_first_line() const { return break_node_first_line_; } private: bool inspector_enabled_; bool deprecated_debug_; bool break_first_line_; + bool break_node_first_line_; std::string host_name_; int port_; };