mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
* fix: ensure that the node env is not bootstrapped before running inspector * fix: ensure we wait for the inspect to disconnect This re-orders our node clean up so that we free the environment before the task runner is cleaned up as node uses the task runner during clean up. It also calls WaitForDisconnect() to ensure that inspector agents are notified that the context is going down. * chore: update spec to catch SIGABRT
70 lines
1.8 KiB
C++
70 lines
1.8 KiB
C++
// Copyright (c) 2014 GitHub, Inc.
|
|
// Use of this source code is governed by the MIT license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "atom/browser/node_debugger.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "atom/common/node_includes.h"
|
|
#include "base/command_line.h"
|
|
#include "base/logging.h"
|
|
#include "base/strings/string_util.h"
|
|
#include "base/strings/utf_string_conversions.h"
|
|
#include "libplatform/libplatform.h"
|
|
#include "native_mate/dictionary.h"
|
|
|
|
namespace atom {
|
|
|
|
NodeDebugger::NodeDebugger(node::Environment* env) : env_(env) {}
|
|
|
|
NodeDebugger::~NodeDebugger() {}
|
|
|
|
void NodeDebugger::Start() {
|
|
auto* inspector = env_->inspector_agent();
|
|
if (inspector == nullptr)
|
|
return;
|
|
|
|
std::vector<std::string> args;
|
|
for (auto& arg : base::CommandLine::ForCurrentProcess()->argv()) {
|
|
#if defined(OS_WIN)
|
|
args.push_back(base::UTF16ToUTF8(arg));
|
|
#else
|
|
args.push_back(arg);
|
|
#endif
|
|
}
|
|
|
|
node::DebugOptions options;
|
|
std::vector<std::string> exec_args;
|
|
std::vector<std::string> v8_args;
|
|
std::vector<std::string> errors;
|
|
|
|
node::options_parser::Parse(&args, &exec_args, &v8_args, &options,
|
|
node::options_parser::kDisallowedInEnvironment,
|
|
&errors);
|
|
|
|
if (!errors.empty()) {
|
|
// TODO(jeremy): what's the appropriate behaviour here?
|
|
LOG(ERROR) << "Error parsing node options: "
|
|
<< base::JoinString(errors, " ");
|
|
}
|
|
|
|
const char* path = "";
|
|
if (inspector->Start(path, options,
|
|
std::make_shared<node::HostPort>(options.host_port),
|
|
true /* is_main */))
|
|
DCHECK(env_->inspector_agent()->IsListening());
|
|
}
|
|
|
|
void NodeDebugger::Stop() {
|
|
auto* inspector = env_->inspector_agent();
|
|
if (inspector && inspector->IsListening()) {
|
|
inspector->WaitForDisconnect();
|
|
inspector->Stop();
|
|
}
|
|
}
|
|
|
|
} // namespace atom
|