Skip to content

Inspector does not initialize when using CreateEnvironment #31258

@ghost

Description

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);

Metadata

Metadata

Assignees

No one assigned

    Labels

    embeddingIssues and PRs related to embedding Node.js in another project.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions