1 //===-- MICmnLLDBDebuggerHandleEvents.h -------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #pragma once 11 12 // In-house headers: 13 #include "MICmnBase.h" 14 #include "MICmnMIValueList.h" 15 #include "MICmnMIValueTuple.h" 16 #include "MIUtilSingletonBase.h" 17 #include "lldb/API/SBEvent.h" 18 19 // Declarations: 20 class CMICmnLLDBDebugSessionInfo; 21 class CMICmnMIResultRecord; 22 class CMICmnStreamStdout; 23 class CMICmnMIOutOfBandRecord; 24 25 //++ 26 //============================================================================ 27 // Details: MI class to take LLDB SBEvent objects, filter them and form 28 // MI Out-of-band records from the information inside the event object. 29 // These records are then pushed to stdout. 30 // A singleton class. 31 //-- 32 class CMICmnLLDBDebuggerHandleEvents 33 : public CMICmnBase, 34 public MI::ISingleton<CMICmnLLDBDebuggerHandleEvents> { 35 friend class MI::ISingleton<CMICmnLLDBDebuggerHandleEvents>; 36 37 // Methods: 38 public: 39 bool Initialize() override; 40 bool Shutdown() override; 41 // 42 bool HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent); 43 44 // Methods: 45 private: 46 /* ctor */ CMICmnLLDBDebuggerHandleEvents(); 47 /* ctor */ CMICmnLLDBDebuggerHandleEvents( 48 const CMICmnLLDBDebuggerHandleEvents &); 49 void operator=(const CMICmnLLDBDebuggerHandleEvents &); 50 // 51 bool ChkForStateChanges(); 52 bool GetProcessStdout(); 53 bool GetProcessStderr(); 54 bool HandleEventSBBreakPoint(const lldb::SBEvent &vEvent); 55 bool HandleEventSBBreakpointCmn(const lldb::SBEvent &vEvent); 56 bool HandleEventSBBreakpointAdded(const lldb::SBEvent &vEvent); 57 bool HandleEventSBBreakpointLocationsAdded(const lldb::SBEvent &vEvent); 58 bool HandleEventSBProcess(const lldb::SBEvent &vEvent); 59 bool HandleEventSBTarget(const lldb::SBEvent &vEvent); 60 bool HandleEventSBThread(const lldb::SBEvent &vEvent); 61 bool HandleEventSBThreadBitStackChanged(const lldb::SBEvent &vEvent); 62 bool HandleEventSBThreadSuspended(const lldb::SBEvent &vEvent); 63 bool HandleEventSBCommandInterpreter(const lldb::SBEvent &vEvent); 64 bool HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent); 65 bool HandleProcessEventStateRunning(); 66 bool HandleProcessEventStateExited(); 67 bool HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent, 68 bool &vwrbShouldBrk); 69 bool HandleProcessEventStopReasonTrace(); 70 bool HandleProcessEventStopReasonBreakpoint(); 71 bool HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent); 72 bool HandleProcessEventStopException(); 73 bool HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent); 74 bool HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent); 75 bool 76 HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent); 77 bool MiHelpGetModuleInfo(const lldb::SBModule &vModule, 78 const bool vbWithExtraFields, 79 CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord); 80 bool MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple); 81 bool MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord); 82 bool 83 MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiResultRecord); 84 bool MiStoppedAtBreakPoint(const MIuint64 vBrkPtId, 85 const lldb::SBBreakpoint &vBrkPt); 86 bool TextToStdout(const CMIUtilString &vrTxt); 87 bool TextToStderr(const CMIUtilString &vrTxt); 88 bool UpdateSelectedThread(); 89 90 // Overridden: 91 private: 92 // From CMICmnBase 93 /* dtor */ ~CMICmnLLDBDebuggerHandleEvents() override; 94 void InitializeSignals(); 95 bool m_bSignalsInitialized; 96 MIuint64 m_SIGINT; 97 MIuint64 m_SIGSTOP; 98 MIuint64 m_SIGSEGV; 99 MIuint64 m_SIGTRAP; 100 }; 101