e85
Stopping and starting multi-thread programs
Contents|Index|Previous|Next
Stopping and starting multi-thread programs
When your program has multiple threads (see Debugging programs with multiple threads), you can choose whether to set breakpoints on all threads, or on a
particular thread.
break linespec thread threadno
break linespec thread threadno if...
linespec
specifies source lines; there are several ways of writing them, but the
effect is always to specify some source line.
Use the qualifier
thread threadno with a breakpoint command to specify that you only want GDB to stop the
program when a particular thread reaches this breakpoint. threadno is one of the numeric thread identifiers assigned by GDB, shown in the first
column of the info threads display.
If you do not specify
thread threadno when you set a breakpoint, the breakpoint applies to all threads of your
program.
You can use the
thread qualifier on conditional breakpoints as well; in this case, place thread threadno before the breakpoint condition, like the following example shows.
(gdb) break frik.c:13 thread 28 if bartab > lim
Whenever your program stops under GDB for any reason, all threads of execution
stop, not just the current thread. This allows you to examine the overall
state of the program, including switching between threads, without worrying that
things may change underfoot.
Conversely, whenever you restart the program, all threads start executing. This is true even when single-stepping with commands like
step or next.
In particular, GDB cannot single-step all threads in lockstep. Since thread
scheduling is up to your debugging targets operating system (not controlled by
GDB), other threads may execute more than one statement while the current thread
completes a single step. Moreover, in general other threads stop in the middle
of a statement, rather than at a clean statement boundary, when the program
stops.
You might even find your program stopped in another thread after continuing or
even single-stepping. This happens whenever some other thread runs into a
breakpoint, a signal, or an exception before the first thread completes whatever
you requested.
0