<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Thanks, this was exactly what I was looking for</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">

<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Eran</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Apr 17, 2014 at 10:39 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When doing multi-threaded debugging, you might have more than one thread that is stopped due to a signal, breakpoint, watchpoint etc. You you must ask the threads for their stop reason. A process doesn't stop for a reason, but threads do.<br>


<br>
So you need to iterate through the threads:<br>
<br>
uint32_t num_threads = process.GetNumThreads();<br>
<br>
for (uint32_t i=0; i<num_threads; ++i)<br>
{<br>
    SBThread thread = process.GetThreadAtIndex(i);<br>
<br>
<br>
Then ask each thread for its stop reason:<br>
<br>
    lldb::StopReason stop_reason = thread.GetStopReason();<br>
<br>
Then based on the thread stop reason, you can then query for more detailed info based on what "stop_reason" is:<br>
<br>
    /// Get the number of words associated with the stop reason.<br>
    /// See also GetStopReasonDataAtIndex().<br>
    size_t<br>
    SBThread::GetStopReasonDataCount();<br>
<br>
    //--------------------------------------------------------------------------<br>
    /// Get information associated with a stop reason.<br>
    ///<br>
    /// Breakpoint stop reasons will have data that consists of pairs of<br>
    /// breakpoint IDs followed by the breakpoint location IDs (they always come<br>
    /// in pairs).<br>
    ///<br>
    /// Stop Reason              Count Data Type<br>
    /// ======================== ===== =========================================<br>
    /// eStopReasonNone          0<br>
    /// eStopReasonTrace         0<br>
    /// eStopReasonBreakpoint    N     duple: {breakpoint id, location id}<br>
    /// eStopReasonWatchpoint    1     watchpoint id<br>
    /// eStopReasonSignal        1     unix signal number<br>
    /// eStopReasonException     N     exception data<br>
    /// eStopReasonExec          0<br>
    /// eStopReasonPlanComplete  0<br>
    //--------------------------------------------------------------------------<br>
    uint64_t<br>
    SBThread::GetStopReasonDataAtIndex(uint32_t idx);<br>
<div><div class="h5"><br>
<br>
<br>
On Apr 17, 2014, at 11:49 AM, Eran Ifrah <<a href="mailto:eran.ifrah@gmail.com">eran.ifrah@gmail.com</a>> wrote:<br>
<br>
> Hi,<br>
><br>
> How do I obtain the exact reason of the process stop state?<br>
><br>
> Atm, I have a background thread that calls "m_listener.WaitForEvent(..)" once an event arrives<br>
> it extracts the process state from the event using the following method:<br>
><br>
> lldb::StateType state = m_process.GetStateFromEvent( event );<br>
><br>
> And I handle it accordingly.<br>
> However, if a process state is lldb::eStateStopped<br>
> I would like to know the reason why, e.g.  'Breakpoint Hit', 'SIGSEGV' etc<br>
><br>
> Any advice?<br>
><br>
> --<br>
> Eran Ifrah<br>
> Author of codelite, a cross platform open source C/C++ IDE: <a href="http://www.codelite.org" target="_blank">http://www.codelite.org</a><br>
> wxCrafter, a wxWidgets RAD: <a href="http://wxcrafter.codelite.org" target="_blank">http://wxcrafter.codelite.org</a><br>
</div></div>> _______________________________________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Eran Ifrah<br>Author of codelite, a cross platform open source C/C++ IDE: <a href="http://www.codelite.org" target="_blank">http://www.codelite.org</a><br>

<div>wxCrafter, a wxWidgets RAD: http://<a href="http://wxcrafter.codelite.org" target="_blank">wxcrafter.codelite.org</a></div></div>
</div>