[lldb-dev] Running other threads while stepping

Kaylor, Andrew andrew.kaylor at intel.com
Thu Sep 5 16:37:05 PDT 2013


When you say that you end up stopping on a breakpoint in another thread, do you mean that you stop at the user breakpoint that you set on the sleep call or that the other thread stops on the internal breakpoint associated with the step command?

If the other thread is hitting the user breakpoint, that sounds reasonable and it's probably just a matter of test timing whether or not it happens.  That is, you might hit the breakpoint in both threads at once and have it behave like a single stop (except that both thread stops should be reported), or you might hit just one and then hit the other during stepping.  In the log (assuming that Linux process logging is enabled), the case of both breakpoints being hit at once would show up as a breakpoint event being processed while we were trying to stop all threads.

If, on the other hand, the internal breakpoint for the step is being hit by a thread other than the thread that's stepping, that's a problem.  If that happens the thread plan should look at the breakpoint, see that it's an internal breakpoint associated with a particular thread, and continue silently if the thread that hit the breakpoint is not the current thread.  If that were happening, you would see it in the log file but it would otherwise be invisible to the user.


Incidentally, one of the changes in r166732 looks wrong.  The first change in ThreadPlanStepInRange.cpp was this:

+        if (m_stop_others == lldb::eOnlyThisThread)
             stop_others = false;
+        else
+            stop_others = true;

Unless I'm reading this wrong that will cause the thread plan to run other threads if the selected mode has requested that only the current thread be run during stepping but will stop other threads in other case, which seems exactly backward from what is intended.

-Andy

-----Original Message-----
From: lldb-dev-bounces at cs.uiuc.edu [mailto:lldb-dev-bounces at cs.uiuc.edu] On Behalf Of Ed Maste
Sent: Thursday, September 05, 2013 2:26 PM
To: lldb-dev at cs.uiuc.edu
Subject: [lldb-dev] Running other threads while stepping

I'm making good progress with the FreeBSD target thread support, but see some differences in behaviour between my work and the Linux support.  (Thanks to Mike Sartain for sending me debug logs of the Linux case.)

I'm using a version of Mike's pthread sample code that I've modified for portability; it's available at https://raw.github.com/emaste/snippets/master/mikesart_pthread.c if anyone's interested.  The test code spawns a couple of threads and sleep()s in those threads.  In my test I set breakpoints on both
sleep() calls and run the process.  After hitting a breakpoint I 'step-in' or 'step-over' the sleep(), and I end up stopping on a breakpoint in another thread, rather than moving to the next source line.  Mike's log on Linux doesn't show this; the process carries on with the next line.

SVN r166732 has the commit message "Found a couple more places where we need to run all threads when stepping," and as described it does introduce cases where all threads are run for a step-in or step-over.
For whatever reason this affects the ThreadPlans I encounter on FreeBSD, but not Linux.

I'm curious about the reason this change was made, and whether the Linux behaviour or mine is expected.  I can see arguments both ways, but would expect the behaviour to be consistent on both platforms.
_______________________________________________
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