[lldb-dev] How to get the 'stop' reason of SBProcess

Greg Clayton gclayton at apple.com
Thu Apr 17 12:39:34 PDT 2014


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.

So you need to iterate through the threads:

uint32_t num_threads = process.GetNumThreads();

for (uint32_t i=0; i<num_threads; ++i)
{
    SBThread thread = process.GetThreadAtIndex(i);


Then ask each thread for its stop reason:

    lldb::StopReason stop_reason = thread.GetStopReason();

Then based on the thread stop reason, you can then query for more detailed info based on what "stop_reason" is:

    /// Get the number of words associated with the stop reason.
    /// See also GetStopReasonDataAtIndex().
    size_t
    SBThread::GetStopReasonDataCount();

    //--------------------------------------------------------------------------
    /// Get information associated with a stop reason.
    ///
    /// Breakpoint stop reasons will have data that consists of pairs of 
    /// breakpoint IDs followed by the breakpoint location IDs (they always come
    /// in pairs).
    ///
    /// Stop Reason              Count Data Type
    /// ======================== ===== =========================================
    /// eStopReasonNone          0
    /// eStopReasonTrace         0
    /// eStopReasonBreakpoint    N     duple: {breakpoint id, location id}
    /// eStopReasonWatchpoint    1     watchpoint id
    /// eStopReasonSignal        1     unix signal number
    /// eStopReasonException     N     exception data
    /// eStopReasonExec          0
    /// eStopReasonPlanComplete  0
    //--------------------------------------------------------------------------
    uint64_t
    SBThread::GetStopReasonDataAtIndex(uint32_t idx);



On Apr 17, 2014, at 11:49 AM, Eran Ifrah <eran.ifrah at gmail.com> wrote:

> Hi,
> 
> How do I obtain the exact reason of the process stop state?
> 
> Atm, I have a background thread that calls "m_listener.WaitForEvent(..)" once an event arrives
> it extracts the process state from the event using the following method:
> 
> lldb::StateType state = m_process.GetStateFromEvent( event );
> 
> And I handle it accordingly.
> However, if a process state is lldb::eStateStopped
> I would like to know the reason why, e.g.  'Breakpoint Hit', 'SIGSEGV' etc
> 
> Any advice?
> 
> -- 
> Eran Ifrah
> Author of codelite, a cross platform open source C/C++ IDE: http://www.codelite.org
> wxCrafter, a wxWidgets RAD: http://wxcrafter.codelite.org
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev




More information about the lldb-dev mailing list