[lldb-dev] breakpoints inside loops

Adrian McCarthy amccarth at google.com
Wed Jul 1 11:44:48 PDT 2015


To close the loop here ... the problem had to do with parts of
TargetThreadWindows mixing up m_resume_state and m_temporary_resume_state,
which had all sorts of consequences.  This was uncovered by my earlier
state-change fix from a couple weeks ago.

Patch is pending review.

Thanks for your explanations and ideas.  It was very helpful.

On Wed, Jun 24, 2015 at 4:41 PM, Jim Ingham <jingham at apple.com> wrote:

>
> > On Jun 24, 2015, at 4:40 PM, Jim Ingham <jingham at apple.com> wrote:
> >
> > Just for giggles, try:
> >
> > settings clear target.process.thread.step-avoid-regexp
> >
> > lldb by default doesn't stop on breakpoint hits in code that comes from
> std.  Maybe there's some inlined goo from std that we think we've stopped
> in, and that is why we are auto-continuing.
>
> Wrote too quickly.  Should be:
>
> lldb by default doesn't stop when STEPPING would stop code that comes from
> std.
>
> Jim
>
>
> >
> > Jim
> >
> >> On Jun 24, 2015, at 4:36 PM, Adrian McCarthy <amccarth at google.com>
> wrote:
> >>
> >> Thanks for the sanity check.  I've been studying the step logging, but
> I'll keep at it.
> >>
> >> On Wed, Jun 24, 2015 at 4:32 PM, Jim Ingham <jingham at apple.com> wrote:
> >> I don't see this behavior with the same source on OS X - compiled with
> a pretty recent clang.  It stops every time around the loop as you would
> expect.
> >>
> >> The useful log for these cases is the "step" log.  If you post the step
> log, and the disassembly of the function we are stepping through
> ("disassemble -f" when you stop in the function) I'll take a look.  The
> step log can get kind of long, so it will be easier to read if you run to
> the first breakpoint hit, then turn on the step log, then continue, so the
> log will have only the incorrect continues.
> >>
> >> Jim
> >>
> >> P.S. I'll be on vacation Thurs-Mon, so if I don't get to it by the end
> of the day it may take till Tuesday next...
> >>
> >> Jim
> >>
> >>
> >>> On Jun 24, 2015, at 4:08 PM, Adrian McCarthy <amccarth at google.com>
> wrote:
> >>>
> >>> I'm finding that when I set a breakpoint inside a small loop, the
> breakpoint triggers only the first time.  For example, given this code:
> >>>
> >>> #include <thread>
> >>> #include <chrono>
> >>>
> >>> int main() {
> >>>  for (int i = 0; i < 10; ++i) {
> >>>    std::this_thread::sleep_for(std::chrono::milliseconds(10));
> >>>  }
> >>>  return 0;
> >>> }
> >>>
> >>> If I set the breakpoint on the sleep_for call, it gets hit the first
> time.
> >>>
> >>> (lldb) target create "a.exe"
> >>> Current executable set to 'a.exe' (i686).
> >>> (lldb) br set -l 6
> >>> Breakpoint 1: where = a.exe`main + 36 at hello.cpp:6, address =
> 0x00423044
> >>> (lldb) list
> >>> (lldb) process launch
> >>> Process 9892 launching
> >>> Process 9892 launched: 'D:\src\hello\a.exe' (i686)
> >>> (lldb) Process 9892 stopped
> >>> * thread #1: tid = 0x216c, 0x001c3044 a.exe`main + 36 at hello.cpp:6,
> stop reason = breakpoint 1.1
> >>>    frame #0: 0x001c3044 a.exe`main + 36 at hello.cpp:6
> >>>   3
> >>>   4    int main() {
> >>>   5      for (int i = 0; i < 10; ++i) {
> >>> -> 6        std::this_thread::sleep_for(std::chrono::milliseconds(10));
> >>>   7      }
> >>>   8      return 0;
> >>>   9    }
> >>> frame variable
> >>> (int) i = 0
> >>>
> >>> So far, so good.  But now, if I try to continue, I'd expect the
> breakpoint to be hit again, for the i = 1 iteration.  Instead:
> >>>
> >>> (lldb) continue
> >>> Process 9892 resuming
> >>> (lldb) Process 9892 exited with status = 0 (0x00000000)
> >>>
> >>> If I turn on various levels of locking, I see that the breakpoint
> hits, but the ThreadList::ShouldStop test fails, so the process resumes
> again and again until the loop terminates.
> >>>
> >>> I've been trying to fix TestCreateAfterAttach.py on Windows, but a
> very similar issue is blocking.
> >>>
> >>> Is my expectation incorrect?  Is this problem specific to Windows?
> >>>
> >>> Thanks,
> >>> Adrian.
> >>>
> >>> _______________________________________________
> >>> lldb-dev mailing list
> >>> lldb-dev at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> >>
> >>
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20150701/df69aa17/attachment.html>


More information about the lldb-dev mailing list