From c2efd8aebfab9ac5786a62cafdac4ae8704281a4 Mon Sep 17 00:00:00 2001 From: Josh Gavant Date: Wed, 14 Dec 2016 20:18:15 -0800 Subject: [PATCH] src, inspector: add --inspect-brk option add an --inspect-brk option which breaks on first line of user script. same behavior as old --debug-brk flag. PR-URL: https://github.com/nodejs/node/pull/8979 Reviewed-By: Reviewed-By: --- src/node.cc | 6 ++++ src/node_debug_options.cc | 37 ++++++++++++++-------- test/inspector/inspector-helper.js | 2 +- test/sequential/test-debugger-debug-brk.js | 2 ++ 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/node.cc b/src/node.cc index 3147a90d3e3844..0fb2de259e975f 100644 --- a/src/node.cc +++ b/src/node.cc @@ -3470,6 +3470,12 @@ static void PrintHelp() { " -i, --interactive always enter the REPL even if stdin\n" " does not appear to be a terminal\n" " -r, --require module to preload (option can be repeated)\n" +#if HAVE_INSPECTOR + " --inspect[=host:port] activate inspector on host:port\n" + " (default: 127.0.0.1:9229)\n" + " --inspect-brk[=host:port] activate inspector on host:port\n" + " and break at start of user script\n" +#endif " --no-deprecation silence deprecation warnings\n" " --trace-deprecation show stack traces on deprecations\n" " --throw-deprecation throw an exception anytime a deprecated " diff --git a/src/node_debug_options.cc b/src/node_debug_options.cc index 5681e3d46edaca..490363cde15367 100644 --- a/src/node_debug_options.cc +++ b/src/node_debug_options.cc @@ -8,6 +8,7 @@ namespace node { namespace { + const int default_debugger_port = 5858; const int default_inspector_port = 9229; @@ -30,7 +31,8 @@ int parse_and_validate_port(const std::string& port) { } std::pair split_host_port(const std::string& arg) { - // IPv6, no port + // remove_brackets only works if no port is specified + // so if it has an effect only an IPv6 address was specified std::string host = remove_brackets(arg); if (host.length() < arg.length()) return {host, -1}; @@ -46,6 +48,7 @@ std::pair split_host_port(const std::string& arg) { } return {"", parse_and_validate_port(arg)}; } + // host and port found return std::make_pair(remove_brackets(arg.substr(0, colon)), parse_and_validate_port(arg.substr(colon + 1))); } @@ -90,6 +93,7 @@ bool DebugOptions::ParseOption(const std::string& option) { argument = option.substr(pos + 1); } + // --debug and --inspect are mutually exclusive if (option_name == "--debug") { debugger_enabled_ = true; } else if (option_name == "--debug-brk") { @@ -98,7 +102,15 @@ bool DebugOptions::ParseOption(const std::string& option) { } else if (option_name == "--inspect") { debugger_enabled_ = true; enable_inspector = true; - } else if (option_name != "--debug-port" || !has_argument) { + } else if (option_name == "--inspect-brk") { + debugger_enabled_ = true; + enable_inspector = true; + wait_connect_ = true; + } else if ((option_name != "--debug-port" && + option_name != "--inspect-port") || + !has_argument) { + // only other valid possibility is --debug-port, + // which requires an argument return false; } @@ -112,20 +124,17 @@ bool DebugOptions::ParseOption(const std::string& option) { #endif } - if (!has_argument) { - return true; + // argument can be specified for *any* option to specify host:port + if (has_argument) { + std::pair host_port = split_host_port(argument); + if (!host_port.first.empty()) { + host_name_ = host_port.first; + } + if (host_port.second >= 0) { + port_ = host_port.second; + } } - // FIXME(bnoordhuis) Move IPv6 address parsing logic to lib/net.js. - // It seems reasonable to support [address]:port notation - // in net.Server#listen() and net.Socket#connect(). - std::pair host_port = split_host_port(argument); - if (!host_port.first.empty()) { - host_name_ = host_port.first; - } - if (host_port.second >= 0) { - port_ = host_port.second; - } return true; } diff --git a/test/inspector/inspector-helper.js b/test/inspector/inspector-helper.js index 3e517123fe27f9..105d9b358b7f96 100644 --- a/test/inspector/inspector-helper.js +++ b/test/inspector/inspector-helper.js @@ -428,7 +428,7 @@ Harness.prototype.expectShutDown = function(errorCode) { exports.startNodeForInspectorTest = function(callback) { const child = spawn(process.execPath, - [ '--inspect', '--debug-brk', mainScript ]); + [ '--inspect-brk', mainScript ]); const timeoutId = timeout('Child process did not start properly', 4); diff --git a/test/sequential/test-debugger-debug-brk.js b/test/sequential/test-debugger-debug-brk.js index 3b54f853bc8de3..9968a3769c22be 100644 --- a/test/sequential/test-debugger-debug-brk.js +++ b/test/sequential/test-debugger-debug-brk.js @@ -26,3 +26,5 @@ function test(arg) { test('--debug-brk'); test('--debug-brk=5959'); +test('--inspect-brk'); +test('--inspect-brk=9230');