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>
This commit is contained in:
parent
a91d36fcc1
commit
97a919b12d
@ -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;
|
||||
}
|
||||
|
@ -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_;
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user