Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inspector does not initialize when using CreateEnvironment #31258

Open
jc-lab opened this issue Jan 8, 2020 · 2 comments
Open

Inspector does not initialize when using CreateEnvironment #31258

jc-lab opened this issue Jan 8, 2020 · 2 comments
Labels
embedding Issues and PRs related to embedding Node.js in another project.

Comments

@jc-lab
Copy link

jc-lab commented Jan 8, 2020

Inspector does not initialize when using CreateEnvironment.
So occur crash in the code below. (inspector_agent()->client_ is null)

node/src/node_worker.cc

Lines 79 to 80 in 1a552f6

inspector_parent_handle_ =
env->inspector_agent()->GetParentHandle(thread_id_, url);

return client_->getWorkerManager()->NewParentHandle(thread_id, url);

Initialization takes place only here.

env->InitializeDiagnostics();
// TODO(joyeecheung): when we snapshot the bootstrapped context,
// the inspector and diagnostics setup should after after deserialization.
#if HAVE_INSPECTOR
*exit_code = env->InitializeInspector({});
#endif

Environment* CreateEnvironment(IsolateData* isolate_data,
                               Local<Context> context,
                               int argc,
                               const char* const* argv,
                               int exec_argc,
                               const char* const* exec_argv) {
  Isolate* isolate = context->GetIsolate();
  HandleScope handle_scope(isolate);
  Context::Scope context_scope(context);
  // TODO(addaleax): This is a much better place for parsing per-Environment
  // options than the global parse call.
  std::vector<std::string> args(argv, argv + argc);
  std::vector<std::string> exec_args(exec_argv, exec_argv + exec_argc);
  // TODO(addaleax): Provide more sensible flags, in an embedder-accessible way.
  Environment* env = new Environment(
      isolate_data,
      context,
      args,
      exec_args,
      static_cast<Environment::Flags>(Environment::kIsMainThread |
                                      Environment::kOwnsProcessState |
                                      Environment::kOwnsInspector));
  env->InitializeLibuv(per_process::v8_is_profiling);
  // ========== START SUGGEST ==========
  env->InitializeDiagnostics();

  // TODO(joyeecheung): when we snapshot the bootstrapped context,
  // the inspector and diagnostics setup should after after deserialization.
#if HAVE_INSPECTOR && NODE_USE_V8_PLATFORM
  //TODO(jc-lab): If InitializeInspector fails, the caller must be informed of the return_code.
  env->InitializeInspector(nullptr);
#endif

I thought about the above suggestions.
However, the above proposal does not pass the EnvironmentTest.MultipleEnvironmentsPerIsolate test.

CHECK_EQ(start_io_thread_async_initialized.exchange(true), false);

@addaleax
Copy link
Member

addaleax commented Jan 9, 2020

#30467 should fix this but it’s been blocked for a while, it’s on the top of my TODO list but I haven’t quite gotten back to it yet.

@addaleax addaleax added the embedding Issues and PRs related to embedding Node.js in another project. label Jan 9, 2020
@jc-lab
Copy link
Author

jc-lab commented Aug 31, 2020

It is maybe resolved by #32672. But I haven't tested it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
embedding Issues and PRs related to embedding Node.js in another project.
Projects
None yet
Development

No branches or pull requests

1 participant