diff options
Diffstat (limited to 'lldb/tools/lldb-mi/MICmnLLDBDebugger.h')
-rw-r--r-- | lldb/tools/lldb-mi/MICmnLLDBDebugger.h | 187 |
1 files changed, 104 insertions, 83 deletions
diff --git a/lldb/tools/lldb-mi/MICmnLLDBDebugger.h b/lldb/tools/lldb-mi/MICmnLLDBDebugger.h index 83bc3c06bf6..bec9adf1383 100644 --- a/lldb/tools/lldb-mi/MICmnLLDBDebugger.h +++ b/lldb/tools/lldb-mi/MICmnLLDBDebugger.h @@ -10,105 +10,126 @@ #pragma once // Third party headers +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBEvent.h" +#include "lldb/API/SBListener.h" #include <condition_variable> #include <map> #include <mutex> -#include "lldb/API/SBDebugger.h" -#include "lldb/API/SBListener.h" -#include "lldb/API/SBEvent.h" // In-house headers: #include "MICmnBase.h" -#include "MIUtilThreadBaseStd.h" #include "MIUtilSingletonBase.h" +#include "MIUtilThreadBaseStd.h" // Declarations: class CMIDriverBase; class CMICmnLLDBDebuggerHandleEvents; -//++ ============================================================================ +//++ +//============================================================================ // Details: MI proxy/adapter for the LLDB public SBDebugger API. The CMIDriver // requires *this object. Command classes make calls on *this object // to facilitate their work effort. The instance runs in its own worker // thread. // A singleton class. //-- -class CMICmnLLDBDebugger : public CMICmnBase, public CMIUtilThreadActiveObjBase, public MI::ISingleton<CMICmnLLDBDebugger> -{ - friend class MI::ISingleton<CMICmnLLDBDebugger>; - - // Methods: - public: - bool Initialize() override; - bool Shutdown() override; - - bool SetDriver(const CMIDriverBase &vClientDriver); - CMIDriverBase &GetDriver() const; - lldb::SBDebugger &GetTheDebugger(); - lldb::SBListener &GetTheListener(); - void WaitForHandleEvent(); - bool CheckIfNeedToRebroadcastStopEvent(); - void RebroadcastStopEvent(); - - // MI Commands can use these functions to listen for events they require - bool RegisterForEvent(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, const MIuint vEventMask); - bool UnregisterForEvent(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass); - bool RegisterForEvent(const CMIUtilString &vClientName, const lldb::SBBroadcaster &vBroadcaster, const MIuint vEventMask); - bool UnregisterForEvent(const CMIUtilString &vClientName, const lldb::SBBroadcaster &vBroadcaster); - - // Overridden: - public: - // From CMIUtilThreadActiveObjBase - const CMIUtilString &ThreadGetName() const override; - - // Overridden: - protected: - // From CMIUtilThreadActiveObjBase - bool ThreadRun(bool &vrIsAlive) override; - bool ThreadFinish() override; - - // Typedefs: - private: - typedef std::map<CMIUtilString, MIuint> MapBroadcastClassNameToEventMask_t; - typedef std::pair<CMIUtilString, MIuint> MapPairBroadcastClassNameToEventMask_t; - typedef std::map<CMIUtilString, MIuint> MapIdToEventMask_t; - typedef std::pair<CMIUtilString, MIuint> MapPairIdToEventMask_t; - - // Methods: - private: - /* ctor */ CMICmnLLDBDebugger(); - /* ctor */ CMICmnLLDBDebugger(const CMICmnLLDBDebugger &); - void operator=(const CMICmnLLDBDebugger &); - - bool InitSBDebugger(); - bool InitSBListener(); - bool InitStdStreams(); - bool MonitorSBListenerEvents(bool &vrbYesExit); - - bool BroadcasterGetMask(const CMIUtilString &vBroadcasterClass, MIuint &vEventMask) const; - bool BroadcasterRemoveMask(const CMIUtilString &vBroadcasterClass); - bool BroadcasterSaveMask(const CMIUtilString &vBroadcasterClass, const MIuint vEventMask); - - MIuint ClientGetMaskForAllClients(const CMIUtilString &vBroadcasterClass) const; - bool ClientSaveMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, const MIuint vEventMask); - bool ClientRemoveTheirMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass); - bool ClientGetTheirMask(const CMIUtilString &vClientName, const CMIUtilString &vBroadcasterClass, MIuint &vwEventMask); - bool LoadMIFormatters(lldb::SBTypeCategory miCategory); - bool RegisterMISummaryProviders(); - // Overridden: - private: - // From CMICmnBase - /* dtor */ ~CMICmnLLDBDebugger() override; - - // Attributes: - private: - CMIDriverBase *m_pClientDriver; // The driver that wants to use *this LLDB debugger - lldb::SBDebugger m_lldbDebugger; // SBDebugger is the primordial object that creates SBTargets and provides access to them - lldb::SBListener m_lldbListener; // API clients can register its own listener to debugger events - const CMIUtilString m_constStrThisThreadId; - MapBroadcastClassNameToEventMask_t m_mapBroadcastClassNameToEventMask; - MapIdToEventMask_t m_mapIdToEventMask; - std::mutex m_mutexEventQueue; - std::condition_variable m_conditionEventQueueEmpty; - uint32_t m_nLastStopId; +class CMICmnLLDBDebugger : public CMICmnBase, + public CMIUtilThreadActiveObjBase, + public MI::ISingleton<CMICmnLLDBDebugger> { + friend class MI::ISingleton<CMICmnLLDBDebugger>; + + // Methods: +public: + bool Initialize() override; + bool Shutdown() override; + + bool SetDriver(const CMIDriverBase &vClientDriver); + CMIDriverBase &GetDriver() const; + lldb::SBDebugger &GetTheDebugger(); + lldb::SBListener &GetTheListener(); + void WaitForHandleEvent(); + bool CheckIfNeedToRebroadcastStopEvent(); + void RebroadcastStopEvent(); + + // MI Commands can use these functions to listen for events they require + bool RegisterForEvent(const CMIUtilString &vClientName, + const CMIUtilString &vBroadcasterClass, + const MIuint vEventMask); + bool UnregisterForEvent(const CMIUtilString &vClientName, + const CMIUtilString &vBroadcasterClass); + bool RegisterForEvent(const CMIUtilString &vClientName, + const lldb::SBBroadcaster &vBroadcaster, + const MIuint vEventMask); + bool UnregisterForEvent(const CMIUtilString &vClientName, + const lldb::SBBroadcaster &vBroadcaster); + + // Overridden: +public: + // From CMIUtilThreadActiveObjBase + const CMIUtilString &ThreadGetName() const override; + + // Overridden: +protected: + // From CMIUtilThreadActiveObjBase + bool ThreadRun(bool &vrIsAlive) override; + bool ThreadFinish() override; + + // Typedefs: +private: + typedef std::map<CMIUtilString, MIuint> MapBroadcastClassNameToEventMask_t; + typedef std::pair<CMIUtilString, MIuint> + MapPairBroadcastClassNameToEventMask_t; + typedef std::map<CMIUtilString, MIuint> MapIdToEventMask_t; + typedef std::pair<CMIUtilString, MIuint> MapPairIdToEventMask_t; + + // Methods: +private: + /* ctor */ CMICmnLLDBDebugger(); + /* ctor */ CMICmnLLDBDebugger(const CMICmnLLDBDebugger &); + void operator=(const CMICmnLLDBDebugger &); + + bool InitSBDebugger(); + bool InitSBListener(); + bool InitStdStreams(); + bool MonitorSBListenerEvents(bool &vrbYesExit); + + bool BroadcasterGetMask(const CMIUtilString &vBroadcasterClass, + MIuint &vEventMask) const; + bool BroadcasterRemoveMask(const CMIUtilString &vBroadcasterClass); + bool BroadcasterSaveMask(const CMIUtilString &vBroadcasterClass, + const MIuint vEventMask); + + MIuint + ClientGetMaskForAllClients(const CMIUtilString &vBroadcasterClass) const; + bool ClientSaveMask(const CMIUtilString &vClientName, + const CMIUtilString &vBroadcasterClass, + const MIuint vEventMask); + bool ClientRemoveTheirMask(const CMIUtilString &vClientName, + const CMIUtilString &vBroadcasterClass); + bool ClientGetTheirMask(const CMIUtilString &vClientName, + const CMIUtilString &vBroadcasterClass, + MIuint &vwEventMask); + bool LoadMIFormatters(lldb::SBTypeCategory miCategory); + bool RegisterMISummaryProviders(); + // Overridden: +private: + // From CMICmnBase + /* dtor */ ~CMICmnLLDBDebugger() override; + + // Attributes: +private: + CMIDriverBase + *m_pClientDriver; // The driver that wants to use *this LLDB debugger + lldb::SBDebugger m_lldbDebugger; // SBDebugger is the primordial object that + // creates SBTargets and provides access to + // them + lldb::SBListener m_lldbListener; // API clients can register its own listener + // to debugger events + const CMIUtilString m_constStrThisThreadId; + MapBroadcastClassNameToEventMask_t m_mapBroadcastClassNameToEventMask; + MapIdToEventMask_t m_mapIdToEventMask; + std::mutex m_mutexEventQueue; + std::condition_variable m_conditionEventQueueEmpty; + uint32_t m_nLastStopId; }; |