brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · a4db764 Raw
104 lines · c
1//===-- ProcessDebugger.h ---------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef liblldb_ProcessDebugger_h_10#define liblldb_ProcessDebugger_h_11 12#include "lldb/Host/windows/windows.h"13 14#include "lldb/Utility/Status.h"15#include "lldb/lldb-forward.h"16#include "lldb/lldb-types.h"17#include "llvm/Support/Mutex.h"18 19#include "ForwardDecl.h"20#include <map>21#include <set>22 23namespace lldb_private {24 25class HostProcess;26class HostThread;27class ProcessLaunchInfo;28class ProcessAttachInfo;29 30class ProcessWindowsData {31public:32  ProcessWindowsData(bool stop_at_entry) : m_stop_at_entry(stop_at_entry) {33    m_initial_stop_event = ::CreateEvent(nullptr, TRUE, FALSE, nullptr);34  }35 36  ~ProcessWindowsData() { ::CloseHandle(m_initial_stop_event); }37 38  Status m_launch_error;39  DebuggerThreadSP m_debugger;40  // StopInfoSP m_pending_stop_info;41  HANDLE m_initial_stop_event = nullptr;42  bool m_initial_stop_received = false;43  bool m_stop_at_entry;44  std::map<lldb::tid_t, lldb::ThreadSP> m_new_threads;45  std::set<lldb::tid_t> m_exited_threads;46};47 48class ProcessDebugger {49 50public:51  virtual ~ProcessDebugger();52 53  virtual void OnExitProcess(uint32_t exit_code);54  virtual void OnDebuggerConnected(lldb::addr_t image_base);55  virtual ExceptionResult OnDebugException(bool first_chance,56                                           const ExceptionRecord &record);57  virtual void OnCreateThread(const HostThread &thread);58  virtual void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code);59  virtual void OnLoadDll(const ModuleSpec &module_spec,60                         lldb::addr_t module_addr);61  virtual void OnUnloadDll(lldb::addr_t module_addr);62  virtual void OnDebugString(const std::string &string);63  virtual void OnDebuggerError(const Status &error, uint32_t type);64 65protected:66  Status DetachProcess();67 68  Status LaunchProcess(ProcessLaunchInfo &launch_info,69                       DebugDelegateSP delegate);70 71  Status AttachProcess(lldb::pid_t pid, const ProcessAttachInfo &attach_info,72                       DebugDelegateSP delegate);73 74  Status DestroyProcess(lldb::StateType process_state);75 76  Status HaltProcess(bool &caused_stop);77 78  Status GetMemoryRegionInfo(lldb::addr_t load_addr,79                             MemoryRegionInfo &range_info);80 81  Status ReadMemory(lldb::addr_t addr, void *buf, size_t size,82                    size_t &bytes_read);83 84  Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size,85                     size_t &bytes_written);86 87  Status AllocateMemory(size_t size, uint32_t permissions, lldb::addr_t &addr);88 89  Status DeallocateMemory(lldb::addr_t addr);90 91  lldb::pid_t GetDebuggedProcessId() const;92 93  Status WaitForDebuggerConnection(DebuggerThreadSP debugger,94                                   HostProcess &process);95 96protected:97  llvm::sys::Mutex m_mutex;98  std::unique_ptr<ProcessWindowsData> m_session_data;99};100 101} // namespace lldb_private102 103#endif // #ifndef liblldb_ProcessDebugger_h_104