// LLDB C++ API Test: verify the event description as obtained by calling // SBEvent::GetCStringFromEvent that is received by an // SBListener object registered with a process with a breakpoint. #include #include #include #include %include_SB_APIs% #include "common.h" using namespace lldb; using namespace std; // listener thread control extern atomic g_done; // used by listener thread to communicate a successful process continue command // back to the checking thread. multithreaded_queue g_process_started; extern SBListener g_listener; void listener_func() { while (!g_done) { SBEvent event; bool got_event = g_listener.WaitForEvent(1, event); if (got_event) { if (!event.IsValid()) throw Exception("event is not valid in listener thread"); SBProcess process = SBProcess::GetProcessFromEvent(event); if (process.GetState() == eStateStopped) { SBError error = process.Continue(); if (!error.Success()) throw Exception(string("Cannot continue process from listener thread: ") + error.GetCString()); g_process_started.push(true); } } } } void check_listener(SBDebugger &dbg) { bool got_message = false; while (!got_message) g_process_started.pop(5, got_message); g_done = true; }