void JuliaEventHandlerLoop() { lldb_private::Listener& listener(m_dbg->GetListener()); lldb_private::ConstString broadcaster_class_target(lldb_private::Target::GetStaticBroadcasterClass()); lldb_private::ConstString broadcaster_class_process(lldb_private::Process::GetStaticBroadcasterClass()); lldb_private::ConstString broadcaster_class_thread(lldb_private::Thread::GetStaticBroadcasterClass()); lldb_private::BroadcastEventSpec target_event_spec (broadcaster_class_target, lldb_private::Target::eBroadcastBitBreakpointChanged); lldb_private::BroadcastEventSpec process_event_spec (broadcaster_class_process, lldb_private::Process::eBroadcastBitStateChanged | lldb_private::Process::eBroadcastBitSTDOUT | lldb_private::Process::eBroadcastBitSTDERR); lldb_private::BroadcastEventSpec thread_event_spec (broadcaster_class_thread, lldb_private::Thread::eBroadcastBitStackChanged | lldb_private::Thread::eBroadcastBitThreadSelected ); listener.StartListeningForEventSpec (*m_dbg, target_event_spec); listener.StartListeningForEventSpec (*m_dbg, process_event_spec); listener.StartListeningForEventSpec (*m_dbg, thread_event_spec); listener.StartListeningForEvents (&m_dbg->GetCommandInterpreter(), lldb_private::CommandInterpreter::eBroadcastBitQuitCommandReceived | lldb_private::CommandInterpreter::eBroadcastBitAsynchronousOutputData | lldb_private::CommandInterpreter::eBroadcastBitAsynchronousErrorData ); m_sync_broadcaster.BroadcastEvent(eBroadcastBitEventThreadIsListening); bool done = false; while (!done) { lldb::EventSP event_sp; if (listener.WaitForEvent(NULL, event_sp)) { if (event_sp) { lldb_private::Broadcaster *broadcaster = event_sp->GetBroadcaster(); if (broadcaster) { uint32_t event_type = event_sp->GetType(); lldb_private::ConstString broadcaster_class (broadcaster->GetBroadcasterClass()); if (broadcaster_class == broadcaster_class_process) { lldb::StreamSP output_stream_sp = m_dbg->GetAsyncOutputStream(); HandleProcessStateChangedEvent(event_sp,output_stream_sp.get()); } else if (broadcaster_class == broadcaster_class_target) { if (lldb_private::Breakpoint::BreakpointEventData::GetEventDataFromEvent(event_sp.get())) { m_dbg->HandleBreakpointEvent (event_sp); } } else if (broadcaster_class == broadcaster_class_thread) { //m_dbg->HandleThreadEvent (event_sp); } else if (broadcaster == &m_dbg->GetCommandInterpreter()) { if (event_type & lldb_private::CommandInterpreter::eBroadcastBitQuitCommandReceived) { done = true; } else if (event_type & lldb_private::CommandInterpreter::eBroadcastBitAsynchronousErrorData) { const char *data = reinterpret_cast<const char *>(lldb_private::EventDataBytes::GetBytesFromEvent (event_sp.get())); if (data && data[0]) { lldb::StreamSP error_sp (m_dbg->GetAsyncErrorStream()); if (error_sp) { error_sp->PutCString(data); error_sp->Flush(); } } } else if (event_type & lldb_private::CommandInterpreter::eBroadcastBitAsynchronousOutputData) { const char *data = reinterpret_cast<const char *>(lldb_private::EventDataBytes::GetBytesFromEvent (event_sp.get())); if (data && data[0]) { lldb::StreamSP output_sp (m_dbg->GetAsyncOutputStream()); if (output_sp) { output_sp->PutCString(data); output_sp->Flush(); } } } } } } } } }