Greg,
 
Thanks a lot!
This seems helped.
 
Eugene
 
> Subject: Re: [lldb-dev] C++ API get stray process stopped event
> From: gclay...@apple.com
> Date: Thu, 25 Jun 2015 16:14:17 -0700
> CC: lldb-dev@cs.uiuc.edu
> To: eugen...@hotmail.com
> 
> 
> > 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