LLDB  mainline
LocalDebugDelegate.h
Go to the documentation of this file.
1 //===-- LocalDebugDelegate.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_Plugins_Process_Windows_LocalDebugDelegate_H_
10 #define liblldb_Plugins_Process_Windows_LocalDebugDelegate_H_
11 
12 #include <memory>
13 
14 #include "IDebugDelegate.h"
15 
16 #include "lldb/lldb-forward.h"
17 
18 namespace lldb_private {
19 
21 typedef std::shared_ptr<ProcessWindows> ProcessWindowsSP;
22 
23 // LocalDebugDelegate
24 //
25 // LocalDebugDelegate creates a connection between a ProcessWindows and the
26 // debug driver. This serves to decouple ProcessWindows from the debug
27 // driver. It would be possible to get a similar decoupling by just having
28 // ProcessWindows implement this interface directly. There are two reasons
29 // why we don't do this:
30 //
31 // 1) In the future when we add support for local debugging through LLGS, and we
32 // go through the Native*Protocol interface, it is likely we will need the
33 // additional flexibility provided by this sort of adapter pattern.
34 // 2) LLDB holds a shared_ptr to the ProcessWindows, and our driver thread
35 // needs access to it as well. To avoid a race condition, we want to make
36 // sure that we're also holding onto a shared_ptr.
37 // lldb_private::Process supports enable_shared_from_this, but that gives us
38 // a ProcessSP (which is exactly what we are trying to decouple from the
39 // driver), so this adapter serves as a way to transparently hold the
40 // ProcessSP while still keeping it decoupled from the driver.
42 public:
43  explicit LocalDebugDelegate(lldb::ProcessWP process);
44 
45  void OnExitProcess(uint32_t exit_code) override;
46  void OnDebuggerConnected(lldb::addr_t image_base) override;
47  ExceptionResult OnDebugException(bool first_chance,
48  const ExceptionRecord &record) override;
49  void OnCreateThread(const HostThread &thread) override;
50  void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) override;
51  void OnLoadDll(const lldb_private::ModuleSpec &module_spec,
52  lldb::addr_t module_addr) override;
53  void OnUnloadDll(lldb::addr_t module_addr) override;
54  void OnDebugString(const std::string &message) override;
55  void OnDebuggerError(const Status &error, uint32_t type) override;
56 
57 private:
58  ProcessWindowsSP GetProcessPointer();
59 
60  lldb::ProcessWP m_process;
61 };
62 }
63 
64 #endif
void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) override
A class that represents a running process on the host machine.
void OnExitProcess(uint32_t exit_code) override
void OnDebugString(const std::string &message) override
ExceptionResult OnDebugException(bool first_chance, const ExceptionRecord &record) override
void OnCreateThread(const HostThread &thread) override
void OnLoadDll(const lldb_private::ModuleSpec &module_spec, lldb::addr_t module_addr) override
static llvm::raw_ostream & error(Stream &strm)
uint64_t tid_t
Definition: lldb-types.h:86
ExceptionResult
Definition: ForwardDecl.h:16
void OnUnloadDll(lldb::addr_t module_addr) override
void OnDebuggerConnected(lldb::addr_t image_base) override
LocalDebugDelegate(lldb::ProcessWP process)
uint64_t addr_t
Definition: lldb-types.h:83
std::shared_ptr< ProcessWindows > ProcessWindowsSP
void OnDebuggerError(const Status &error, uint32_t type) override
An error handling class.
Definition: Status.h:44