I'm an idiot. My iterator issue was because I was also checking that 
bp.GetNumResolvedLocations > 0. And of course that would fail if the breakpoint 
was disabled.

Thank you everyone for your help. :)


On Oct 19, 2012, at 4:21 PM, Greg Clayton <[email protected]> wrote:

> You can always just use the actual API:
> 
>    uint32_t
>    SBTarget::GetNumBreakpoints () const;
> 
>    lldb::SBBreakpoint
>    SBTarget::GetBreakpointAtIndex (uint32_t idx) const;
> 
> "breakpoint_iter" should be doing the right thing as it is defined in lldb.py 
> (which is in LLDB.framework/Resources/python/lldb):
> 
> 
>    def breakpoint_iter(self): return lldb_iter(self, 'GetNumBreakpoints', 
> 'GetBreakpointAtIndex')
> 
> This calls lldb_iter:
> 
> # Iterator for lldb container objects
> # ===================================
> def lldb_iter(obj, getsize, getelem):
>    """A generator adaptor to support iteration for lldb container objects."""
>    size = getattr(obj, getsize)
>    elem = getattr(obj, getelem)
>    for i in range(size()):
>        yield elem(i)
> 
> 
> 
> On Oct 19, 2012, at 1:10 PM, Bill Terwilliger <[email protected]> wrote:
> 
>> 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
> 


_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to