summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2019-03-12 04:28:51 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2019-03-19 05:45:40 +0800
commit97a919b12dd214b4c1e938ed2cd0d25a3b2cdeab (patch)
tree2602d8ceb906dd54d1f904fc5df81dabc1c44453 /src
parenta91d36fcc12c90f842d38f4a6b50809133bf1bc7 (diff)
downloadandroid-node-v8-97a919b12dd214b4c1e938ed2cd0d25a3b2cdeab.tar.gz
android-node-v8-97a919b12dd214b4c1e938ed2cd0d25a3b2cdeab.tar.bz2
android-node-v8-97a919b12dd214b4c1e938ed2cd0d25a3b2cdeab.zip
inspector: patch C++ debug options instead of process._breakFirstLine
Instead of patching process._breakFirstLine to inform the JS land to wait for the debugger, check that the JS land has not yet serialized the options and then patch the debug options from C++. The changes will be carried into JS later during option serialization. PR-URL: https://github.com/nodejs/node/pull/26602 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'src')
-rw-r--r--src/env-inl.h8
-rw-r--r--src/env.h5
-rw-r--r--src/inspector_agent.cc16
-rw-r--r--src/node_options.cc1
-rw-r--r--src/node_options.h6
5 files changed, 25 insertions, 11 deletions
diff --git a/src/env-inl.h b/src/env-inl.h
index aff12e57bf..b32f3ee63d 100644
--- a/src/env-inl.h
+++ b/src/env-inl.h
@@ -675,6 +675,14 @@ inline void Environment::set_has_run_bootstrapping_code(bool value) {
has_run_bootstrapping_code_ = value;
}
+inline bool Environment::has_serialized_options() const {
+ return has_serialized_options_;
+}
+
+inline void Environment::set_has_serialized_options(bool value) {
+ has_serialized_options_ = value;
+}
+
inline bool Environment::is_main_thread() const {
return flags_ & kIsMainThread;
}
diff --git a/src/env.h b/src/env.h
index 528956db39..70c566dce9 100644
--- a/src/env.h
+++ b/src/env.h
@@ -862,6 +862,9 @@ class Environment {
inline bool has_run_bootstrapping_code() const;
inline void set_has_run_bootstrapping_code(bool has_run_bootstrapping_code);
+ inline bool has_serialized_options() const;
+ inline void set_has_serialized_options(bool has_serialized_options);
+
static uint64_t AllocateThreadId();
static constexpr uint64_t kNoThreadId = -1;
@@ -1106,6 +1109,8 @@ class Environment {
std::unordered_map<std::string, uint64_t> performance_marks_;
bool has_run_bootstrapping_code_ = false;
+ bool has_serialized_options_ = false;
+
bool can_call_into_js_ = true;
Flags flags_;
uint64_t thread_id_;
diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc
index 7b4dec90fc..90ed285781 100644
--- a/src/inspector_agent.cc
+++ b/src/inspector_agent.cc
@@ -728,18 +728,12 @@ bool Agent::Start(const std::string& path,
return false;
}
- // TODO(joyeecheung): we should not be using process as a global object
- // to transport --inspect-brk. Instead, the JS land can get this through
- // require('internal/options') since it should be set once CLI parsing
- // is done.
+ // Patch the debug options to implement waitForDebuggerOnStart for
+ // the NodeWorker.enable method.
if (wait_for_connect) {
- HandleScope scope(parent_env_->isolate());
- parent_env_->process_object()->DefineOwnProperty(
- parent_env_->context(),
- FIXED_ONE_BYTE_STRING(parent_env_->isolate(), "_breakFirstLine"),
- True(parent_env_->isolate()),
- static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum))
- .FromJust();
+ CHECK(!parent_env_->has_serialized_options());
+ debug_options_.EnableBreakFirstLine();
+ parent_env_->options()->get_debug_options()->EnableBreakFirstLine();
client_->waitForFrontend();
}
return true;
diff --git a/src/node_options.cc b/src/node_options.cc
index b208488a69..0bf8cb540c 100644
--- a/src/node_options.cc
+++ b/src/node_options.cc
@@ -571,6 +571,7 @@ void GetOptions(const FunctionCallbackInfo<Value>& args) {
return env->ThrowError(
"Should not query options before bootstrapping is done");
}
+ env->set_has_serialized_options(true);
Isolate* isolate = env->isolate();
Local<Context> context = env->context();
diff --git a/src/node_options.h b/src/node_options.h
index a49425388c..e8fb002094 100644
--- a/src/node_options.h
+++ b/src/node_options.h
@@ -75,6 +75,12 @@ class DebugOptions : public Options {
HostPort host_port{"127.0.0.1", kDefaultInspectorPort};
+ // Used to patch the options as if --inspect-brk is passed.
+ void EnableBreakFirstLine() {
+ inspector_enabled = true;
+ break_first_line = true;
+ }
+
bool wait_for_connect() const {
return break_first_line || break_node_first_line;
}