Thanks Carlo! I am able to find the current breakpoint with GetStopReasonDataAtIndex(0).
New problem… when I find my breakpoint, I'm calling bp.SetEnabled(False) and then process.Continue(), and that seems to work as expected. But later when I use target.breakpoint_iter() to iterate over all of the breakpoints, it stops iterating after a single breakpoint. The script is setting 12 breakpoints, 9 of them are being triggered (and disabled.) My understanding of the code is that all 12 breakpoints should still be there regardless of the their 'enabled' state. When I take out the bp.SetEnabled(False) line, the iterator continues to work as expected. Is this a bug or am I doing something else wrong? --bill On Oct 19, 2012, at 3:25 PM, Carlo Kok <[email protected]> wrote: > Op 19-10-2012 20:26, Bill Terwilliger schreef: >> Hi, >> >> I'm having trouble using breakpoints with the python API... My script >> creates a bunch of breakpoints (by address), launches the target and then >> goes into an infinite loop checking 'process.GetState()'. The scripts checks >> for a state of 'eStateStopped', and then iterates through the threads until >> it finds a thread stop reason of 'eStopReasonBreakpoint'. The issue with >> that approach is that I can't figure out which breakpoint triggered the >> thread to stop. So I guess I have two questions, (1) how do I use >> SetCallback() to call a method when a breakpoint is triggered and (2) if I >> know which thread hit my breakpoint, how do I know which SBBreakpoint >> triggered? >> >> BTW, I looked through all of the unit test for examples of how to do this >> but all I could find was a call to SetCallback(None, None). The >> documentation for SBBreakpoint gives a prototype of >> SetCallback(BreakpointHitCallback callback, void baton) but >> BreakpointHitCallback doesn't appear to be documented in the python docs. >> >> Any help would be greatly appreciated. :-) >> > > There's an events sample for python. Essentially you have a thread waiting > for events on a listener, the wait call returns and the SBEvent you get then > can be retrieved: > > SBEvent data; > while (!stop) { > if (self->m_listener.WaitForEvent(UINT32_MAX, data)) { > if (data.getType() == SBProcess::eBroadcastBitStateChanged && > m_process.GetStateFromEvent (data) == eStateStopped) { > SBThread th = m_process.GetSelectedThread(); > if (th.GetStopReason() == eStopReasonBreakpoint) { > // th.GetStopReasonDataAtIndex(0) should have the breakpoint id > } > } > } > } > > something like that > _______________________________________________ > lldb-dev mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev _______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
