1 //===-- MICmnLLDBDebuggerHandleEvents.h -------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
12 #include "MICmnBase.h"
13 #include "MICmnMIValueList.h"
14 #include "MICmnMIValueTuple.h"
15 #include "MIUtilSingletonBase.h"
16 #include "lldb/API/SBEvent.h"
19 class CMICmnLLDBDebugSessionInfo;
20 class CMICmnMIResultRecord;
21 class CMICmnStreamStdout;
22 class CMICmnMIOutOfBandRecord;
25 //============================================================================
26 // Details: MI class to take LLDB SBEvent objects, filter them and form
27 // MI Out-of-band records from the information inside the event object.
28 // These records are then pushed to stdout.
31 class CMICmnLLDBDebuggerHandleEvents
33 public MI::ISingleton<CMICmnLLDBDebuggerHandleEvents> {
34 friend class MI::ISingleton<CMICmnLLDBDebuggerHandleEvents>;
38 bool Initialize() override;
39 bool Shutdown() override;
41 bool HandleEvent(const lldb::SBEvent &vEvent, bool &vrbHandledEvent);
45 /* ctor */ CMICmnLLDBDebuggerHandleEvents();
46 /* ctor */ CMICmnLLDBDebuggerHandleEvents(
47 const CMICmnLLDBDebuggerHandleEvents &);
48 void operator=(const CMICmnLLDBDebuggerHandleEvents &);
50 bool ChkForStateChanges();
51 bool GetProcessStdout();
52 bool GetProcessStderr();
53 bool HandleEventSBBreakPoint(const lldb::SBEvent &vEvent);
54 bool HandleEventSBBreakpointCmn(const lldb::SBEvent &vEvent);
55 bool HandleEventSBBreakpointAdded(const lldb::SBEvent &vEvent);
56 bool HandleEventSBBreakpointLocationsAdded(const lldb::SBEvent &vEvent);
57 bool HandleEventSBProcess(const lldb::SBEvent &vEvent);
58 bool HandleEventSBTarget(const lldb::SBEvent &vEvent);
59 bool HandleEventSBThread(const lldb::SBEvent &vEvent);
60 bool HandleEventSBThreadBitStackChanged(const lldb::SBEvent &vEvent);
61 bool HandleEventSBThreadSuspended(const lldb::SBEvent &vEvent);
62 bool HandleEventSBCommandInterpreter(const lldb::SBEvent &vEvent);
63 bool HandleProcessEventBroadcastBitStateChanged(const lldb::SBEvent &vEvent);
64 bool HandleProcessEventStateRunning();
65 bool HandleProcessEventStateExited();
66 bool HandleProcessEventStateStopped(const lldb::SBEvent &vrEvent,
68 bool HandleProcessEventStopReasonTrace();
69 bool HandleProcessEventStopReasonBreakpoint();
70 bool HandleProcessEventStopSignal(const lldb::SBEvent &vrEvent);
71 bool HandleProcessEventStopException();
72 bool HandleProcessEventStateSuspended(const lldb::SBEvent &vEvent);
73 bool HandleTargetEventBroadcastBitModulesLoaded(const lldb::SBEvent &vEvent);
75 HandleTargetEventBroadcastBitModulesUnloaded(const lldb::SBEvent &vEvent);
76 bool MiHelpGetModuleInfo(const lldb::SBModule &vModule,
77 const bool vbWithExtraFields,
78 CMICmnMIOutOfBandRecord &vwrMiOutOfBandRecord);
79 bool MiHelpGetCurrentThreadFrame(CMICmnMIValueTuple &vwrMiValueTuple);
80 bool MiResultRecordToStdout(const CMICmnMIResultRecord &vrMiResultRecord);
82 MiOutOfBandRecordToStdout(const CMICmnMIOutOfBandRecord &vrMiResultRecord);
83 bool MiStoppedAtBreakPoint(const MIuint64 vBrkPtId,
84 const lldb::SBBreakpoint &vBrkPt);
85 bool TextToStdout(const CMIUtilString &vrTxt);
86 bool TextToStderr(const CMIUtilString &vrTxt);
87 bool UpdateSelectedThread();
92 /* dtor */ ~CMICmnLLDBDebuggerHandleEvents() override;
93 void InitializeSignals();
94 bool m_bSignalsInitialized;