1 //===-- MICmnLLDBDebuggerHandleEvents.h -------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
13 #include "MICmnBase.h"
14 #include "MICmnMIValueList.h"
15 #include "MICmnMIValueTuple.h"
16 #include "MIUtilSingletonBase.h"
17 #include "lldb/API/SBEvent.h"
20 class CMICmnLLDBDebugSessionInfo;
21 class CMICmnMIResultRecord;
22 class CMICmnStreamStdout;
23 class CMICmnMIOutOfBandRecord;
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.
32 class CMICmnLLDBDebuggerHandleEvents
34 public MI::ISingleton<CMICmnLLDBDebuggerHandleEvents> {
35 friend class MI::ISingleton<CMICmnLLDBDebuggerHandleEvents>;
39 bool Initialize() override;
40 bool Shutdown() override;
42 bool HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent);
46 /* ctor */ CMICmnLLDBDebuggerHandleEvents();
47 /* ctor */ CMICmnLLDBDebuggerHandleEvents(
48 const CMICmnLLDBDebuggerHandleEvents &);
49 void operator=(const CMICmnLLDBDebuggerHandleEvents &);
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,
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);
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);
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();
93 /* dtor */ ~CMICmnLLDBDebuggerHandleEvents() override;
94 void InitializeSignals();
95 bool m_bSignalsInitialized;