LLDB  mainline
ProcessDebugger.h
Go to the documentation of this file.
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef liblldb_ProcessDebugger_h_
10 #define liblldb_ProcessDebugger_h_
11 
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 
23 namespace lldb_private {
24 
25 class HostProcess;
26 class HostThread;
27 class ProcessLaunchInfo;
28 class ProcessAttachInfo;
29 
31 public:
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 
37 
40  // StopInfoSP m_pending_stop_info;
41  HANDLE m_initial_stop_event = nullptr;
44  std::map<lldb::tid_t, lldb::ThreadSP> m_new_threads;
45  std::set<lldb::tid_t> m_exited_threads;
46 };
47 
49 
50 public:
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 
65 protected:
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 
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 
96 protected:
97  llvm::sys::Mutex m_mutex;
98  std::unique_ptr<ProcessWindowsData> m_session_data;
99 };
100 
101 } // namespace lldb_private
102 
103 #endif // #ifndef liblldb_ProcessDebugger_h_
A class that represents a running process on the host machine.
std::unique_ptr< ProcessWindowsData > m_session_data
std::shared_ptr< DebuggerThread > DebuggerThreadSP
Definition: ForwardDecl.h:36
std::set< lldb::tid_t > m_exited_threads
static MemoryRegionInfo GetMemoryRegionInfo(const MemoryRegionInfos &regions, lldb::addr_t load_addr)
std::shared_ptr< IDebugDelegate > DebugDelegateSP
Definition: ForwardDecl.h:33
ProcessWindowsData(bool stop_at_entry)
static llvm::raw_ostream & error(Stream &strm)
StateType
Process and Thread States.
uint64_t tid_t
Definition: lldb-types.h:86
ExceptionResult
Definition: ForwardDecl.h:16
std::map< lldb::tid_t, lldb::ThreadSP > m_new_threads
uint64_t addr_t
Definition: lldb-types.h:83
uint64_t pid_t
Definition: lldb-types.h:85
An error handling class.
Definition: Status.h:44