A good example in python can be found at:
lldb/examples/python/process_events.py
Also the lldb-vscode plug-in shows how to use the API from a C++ perspective:
lldb/tools/lldb-vscode/lldb-vscode.cpp
Events are generated by SBBroadcaster objects or internally inside of LLDB and caught using SBListener objects. Every object that can generate SBEvents have an enumeration declared in the class header file. For example in SBProcess.h we see:
class LLDB_API SBProcess {
public:
/// Broadcaster event bits definitions.
FLAGS_ANONYMOUS_ENUM(){eBroadcastBitStateChanged = (1 << 0),
eBroadcastBitInterrupt = (1 << 1),
eBroadcastBitSTDOUT = (1 << 2),
eBroadcastBitSTDERR = (1 << 3),
eBroadcastBitProfileData = (1 << 4),
eBroadcastBitStructuredData = (1 << 5)};
If you search for SBEvent in each header file you can see the event introspection functions. They are all static and take a SBEvent & argument. For example to see if an event is a process event you can call:
static bool SBProcess::EventIsProcessEvent(const lldb::SBEvent &event);
It all depends on how many different kinds of events you sign up to listen to with your SBListener. When launching a process you _can_ provide a listener in the SBLaunchInfo or SBAttachInfo, but most people don't set one and all events delivered to the SBDebugger, which you can listen for all events from the SBTarget, SBProcess and SBThread.
Once you determine what kind of event you have using:
static bool SBTarget::EventIsTargetEvent(const lldb::SBEvent &event);
static bool SBProcess::EventIsProcessEvent(const lldb::SBEvent &event);
static bool SBThread::EventIsThreadEvent(const lldb::SBEvent &event);
static bool SB*::EventIs*Event(const lldb::SBEvent &event);
Then you can use the enumerations in the appropriate header file to check the type and identify the event type. There are usually static functions that will help you extract more information from the event. For example for the SBProcess::eBroadcastBitStateChanged event, you can get the state from the event:
static lldb::StateType SBProcess::GetStateFromEvent(const lldb::SBEvent &event);
StateType tells you what the process state has changed to: eStateStopped, eStateRunning, eStateExited.
There definitely should be more documentation on this, but for now feel free to ask us any questions here.
Greg