gdb: Non-Stop Mode
5.5.2 Non-Stop Mode
-------------------
For some multi-threaded targets, GDB supports an optional mode of
operation in which you can examine stopped program threads in the
debugger while other threads continue to execute freely. This minimizes
intrusion when debugging live systems, such as programs where some
threads have real-time constraints or must continue to respond to
external events. This is referred to as "non-stop" mode.
In non-stop mode, when a thread stops to report a debugging event,
_only_ that thread is stopped; GDB does not stop other threads as well,
in contrast to the all-stop mode behavior. Additionally, execution
commands such as 'continue' and 'step' apply by default only to the
current thread in non-stop mode, rather than all threads as in all-stop
mode. This allows you to control threads explicitly in ways that are
not possible in all-stop mode -- for example, stepping one thread while
allowing others to run freely, stepping one thread while holding all
others stopped, or stepping several threads independently and
simultaneously.
To enter non-stop mode, use this sequence of commands before you run
or attach to your program:
# If using the CLI, pagination breaks non-stop.
set pagination off
# Finally, turn it on!
set non-stop on
You can use these commands to manipulate the non-stop mode setting:
'set non-stop on'
Enable selection of non-stop mode.
'set non-stop off'
Disable selection of non-stop mode.
'show non-stop'
Show the current non-stop enablement setting.
Note these commands only reflect whether non-stop mode is enabled,
not whether the currently-executing program is being run in non-stop
mode. In particular, the 'set non-stop' preference is only consulted
when GDB starts or connects to the target program, and it is generally
not possible to switch modes once debugging has started. Furthermore,
since not all targets support non-stop mode, even when you have enabled
non-stop mode, GDB may still fall back to all-stop operation by default.
In non-stop mode, all execution commands apply only to the current
thread by default. That is, 'continue' only continues one thread. To
continue all threads, issue 'continue -a' or 'c -a'.
Execution::) to run some threads in the background while you continue to
GDB/MI Program Execution::) are always executed asynchronously in
non-stop mode.
Suspending execution is done with the 'interrupt' command when
running in the background, or 'Ctrl-c' during foreground execution. In
all-stop mode, this stops the whole process; but in non-stop mode the
interrupt applies only to the current thread. To stop the whole
program, use 'interrupt -a'.
Other execution commands do not currently support the '-a' option.
In non-stop mode, when a thread stops, GDB doesn't automatically make
that thread current, as it does in all-stop mode. This is because the
thread stop notifications are asynchronous with respect to GDB's command
interpreter, and it would be confusing if GDB unexpectedly changed to a
different thread just as you entered a command to operate on the
previously current thread.