63      std::shared_ptr<Task> task = 
GetNext();
 
 
   81  template <
typename Functor>
 
   83    queue_.Enqueue(std::make_shared<Task>(ready_semaphore, task));
 
 
   94      std::shared_ptr<Task> task;
 
   95      if (
queue_.Dequeue(&task)) {
 
 
 
  112template <
typename Functor>
 
  117  ready_semaphore.
Wait();
 
 
  124  std::unique_ptr<GdbServer> gdb_server(
new GdbServer());
 
  128  gdb_server->thread_ = std::make_unique<GdbServerThread>(gdb_server.get());
 
  129  if (!gdb_server->thread_->StartAndInitialize()) {
 
  131        "Cannot initialize thread, GDB-remote debugging will be disabled.\n");
 
 
  153    bool clear_module_list_changed_flag) {
 
  155  std::vector<GdbServer::WasmModuleInfo> modules;
 
  157  RunSyncTask([
this, &modules, clear_module_list_changed_flag]() {
 
  160      uint32_t module_id = pair.first;
 
  162      modules.push_back({module_id, module_debug.
GetModuleName()});
 
 
  173  ScriptsMap::iterator scriptIterator = 
scripts_.find(module_id);
 
  174  if (scriptIterator != 
scripts_.end()) {
 
  175    *wasm_module_debug = &scriptIterator->second;
 
  178  wasm_module_debug = 
nullptr;
 
 
  183                              uint8_t* buffer, uint32_t buffer_size,
 
  190                                            frame_index, index, buffer,
 
 
  197                             uint8_t* buffer, uint32_t buffer_size,
 
  204                                           frame_index, index, buffer,
 
 
  211                                  uint8_t* buffer, uint32_t buffer_size,
 
  218                                                frame_index, index, buffer,
 
 
  225                                  uint8_t* buffer, uint32_t size) {
 
  227  uint32_t bytes_read = 0;
 
 
  240                                uint8_t* buffer, uint32_t size) {
 
  242  uint32_t bytes_read = 0;
 
 
  257  uint32_t bytes_read = 0;
 
  258  RunSyncTask([
this, &bytes_read, wasm_addr, buffer, size]() {
 
 
  275      int breakpoint_id = 0;
 
 
  290    BreakpointsMap::iterator it =
 
  293      int breakpoint_id = it->second;
 
 
  308  std::vector<wasm_addr_t> 
result;
 
 
  320        std::make_unique<DebugDelegate>(isolate, 
this);
 
 
  329      if (it->second.GetIsolate() == isolate) {
 
 
  349          if (v8::debug::AllFramesOnStackAreBlackboxed(isolate)) {
 
 
  392    : 
isolate_(isolate), id_(id_s++), gdb_server_(gdb_server) {
 
 
  405  isolate_->debug()->SetDebugDelegate(
nullptr);
 
 
  410                                              bool has_compile_error) {
 
  412  if (script->IsWasm()) {
 
  414    gdb_server_->AddWasmModule(GetModuleId(script->Id()),
 
  415                               script.As<debug::WasmScript>());
 
 
  422    const std::vector<debug::BreakpointId>& inspector_break_points_hit,
 
  424  gdb_server_->GetTarget().OnProgramBreak(
 
  426  gdb_server_->RunMessageLoopOnPause();
 
 
  435    gdb_server_->GetTarget().OnException(
 
  437    gdb_server_->RunMessageLoopOnPause();
 
 
void RequestInterrupt(InterruptCallback callback, void *data)
static v8::internal::Handle< To > OpenHandle(v8::Local< From > handle)
void SetCaptureStackTraceForUncaughtExceptions(bool capture, int frame_limit, StackTrace::StackTraceOptions options)
DebugDelegate(Isolate *isolate, GdbServer *gdb_server)
void ScriptCompiled(Local< debug::Script > script, bool is_live_edited, bool has_compile_error) override
bool IsFunctionBlackboxed(Local< debug::Script > script, const debug::Location &start, const debug::Location &end) override
static std::atomic< uint32_t > id_s
void ExceptionThrown(Local< v8::Context > paused_context, Local< Value > exception, Local< Value > promise, bool is_uncaught, debug::ExceptionType exception_type) override
void BreakProgramRequested(Local< v8::Context > paused_context, const std::vector< debug::BreakpointId > &inspector_break_points_hit, v8::debug::BreakReasons break_reasons) override
IsolateDebugDelegateMap isolate_delegates_
bool GetWasmLocal(uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
std::unique_ptr< TaskRunner > task_runner_
bool AddBreakpoint(uint32_t wasm_module_id, uint32_t offset)
std::unique_ptr< GdbServerThread > thread_
uint32_t GetWasmModuleBytes(wasm_addr_t address, uint8_t *buffer, uint32_t size)
uint32_t GetWasmData(uint32_t module_id, uint32_t offset, uint8_t *buffer, uint32_t size)
bool GetModuleDebugHandler(uint32_t module_id, WasmModuleDebug **wasm_module_debug)
std::vector< WasmModuleInfo > GetLoadedModules(bool clear_module_list_changed_flag=false)
std::atomic< bool > has_module_list_changed_
bool GetWasmStackValue(uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
std::vector< wasm_addr_t > GetWasmCallStack() const
auto RunSyncTask(Callback &&callback) const
void QuitMessageLoopOnPause()
void RemoveIsolate(Isolate *isolate)
uint32_t GetWasmMemory(uint32_t module_id, uint32_t offset, uint8_t *buffer, uint32_t size)
Target & GetTarget() const
bool GetWasmGlobal(uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
bool RemoveBreakpoint(uint32_t wasm_module_id, uint32_t offset)
static std::unique_ptr< GdbServer > Create()
BreakpointsMap breakpoints_
void RunMessageLoopOnPause()
void AddIsolate(Isolate *isolate)
void AddWasmModule(uint32_t module_id, Local< debug::WasmScript > wasm_script)
const std::vector< wasm_addr_t > GetCallStack() const
wasm_addr_t GetCurrentPc() const
Task(base::Semaphore *ready_semaphore, std::function< void()> func)
std::function< void()> func_
base::Semaphore * ready_semaphore_
v8::base::Semaphore process_queue_semaphore_
LockedQueue< std::shared_ptr< Task > > queue_
TaskRunner & operator=(const TaskRunner &)=delete
std::atomic< bool > is_terminated_
std::shared_ptr< Task > GetNext()
auto Append(base::Semaphore *ready_semaphore, Functor &&task)
TaskRunner(const TaskRunner &)=delete
static std::vector< wasm_addr_t > GetCallStack(uint32_t debug_context_id, Isolate *isolate)
std::string GetModuleName() const
static bool GetWasmStackValue(Isolate *isolate, uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
void RemoveBreakpoint(uint32_t offset, int breakpoint_id)
static bool GetWasmLocal(Isolate *isolate, uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
uint32_t GetWasmMemory(Isolate *isolate, uint32_t offset, uint8_t *buffer, uint32_t size)
uint32_t GetWasmModuleBytes(wasm_addr_t wasm_addr, uint8_t *buffer, uint32_t size)
uint32_t GetWasmData(Isolate *isolate, uint32_t offset, uint8_t *buffer, uint32_t size)
static bool GetWasmGlobal(Isolate *isolate, uint32_t frame_index, uint32_t index, uint8_t *buffer, uint32_t buffer_size, uint32_t *size)
bool AddBreakpoint(uint32_t offset, int *breakpoint_id)
uint32_t ModuleId() const
#define TRACE_GDB_REMOTE(...)
ZoneVector< RpoNumber > & result
void BreakRightNow(Isolate *v8_isolate, base::EnumSet< debug::BreakReason > break_reasons)
void SetBreakOnNextFunctionCall(Isolate *isolate)
void ChangeBreakOnException(Isolate *isolate, ExceptionBreakState type)
@ BreakOnUncaughtException
static const uint32_t kMaxWasmCallStack
typedef void(VECTORCALL PWasmOp)(const uint8_t *code
V8_EXPORT_PRIVATE FlagValues v8_flags
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)