> On Jun 25, 2015, at 10:36 AM, Eugene Birukov <eugen...@hotmail.com> wrote:
> 
> Hi,
>  
> I am running on Linux Ubuntu 14.04 with lldb-4.7 I built from sources about a 
> month ago.
>  
> My C++ debugger does pretty much the following:
>       • Initializes LLDB, sets it to async mode
>       • Gets listener from debugger, subscribes for process and target events 
>       • Sets a few breakpoints
>       • Waits for event on the listener
>       • If event is a process event 
>               • If event type is eBroadcastBitSTDOUT or eBroadcastBitSTERR
>                       • call SBDebugger::HandleProcessEvent() to get it 
> printed
>               • else if process state is eStateStopped
>                       • scan all the target threads and checks their stop 
> reason, registers, etc.
>                       • call SBProcess::Continue()
>       • Loop to 4
>  
> Now, the program behavior varies - so it might be I am doing something 
> wrong...
>  
> One version of the program always gets stray stopped event in the very 
> beginning after reporting several module loads. In this case it has only one 
> thread yet and the thread stop reason is eStopReasonNone. when it happens, I 
> have to skip calling SBProcess::Continue() - i.e. just ignore this event as 
> if the target state was eStateRunning and reissue wait for event. This is a 
> bit annoying but detection and workaround are simple.

You must check to see if a eStateStopped event was restarted:

lldb::SBEvent event = ...; // Get event somehow


lldb::StateType state = SBProcess::GetStateFromEvent(event);
if (state == eStateStopped)
{
  if (SBProcess::GetRestartedFromEvent (event))
  {
    // Ignore this eStateStopped event, as the process already continued
  }
  else
  {
    // Process the stop event.   
  }
}

>  
> Another version of the program does not subscribe for target events. It often 
> works smooth, but once in a while gets stray stopped event and the thread 
> state is eStopReasonTrace. I should not call SBProcess::Continue() in this 
> case too. Now the problem is that I do turn on tracing sometimes, and if it 
> is genuine trace event I have to call continue.
>  
> Any advice - how to investigate this problem - if it is my bug or something 
> in LLDB?

Check for restarted events and let me know if you still see problems after you 
ignore restarts...

Greg Clayton
_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to