In GDB's all-stop mode, whenever your program stops, all execution threads stop. Likewise, whenever you restart the program, all threads start executing. See All-Stop Mode. For some multi-threaded targets, GDB supports a further mode of operation, called non-stop mode, in which you can examine stopped program threads in the debugger while other threads continue to execute freely. See Non-Stop Mode. Versions of GDB prior to 7.0 do not support non-stop mode, and it does not work on all targets.
gdb-non-stop-setting determines whether Emacs
runs GDB in all-stop mode or non-stop mode. The default is
which means it tries to use non-stop mode if that is available. If
you change the value to
nil, or if non-stop mode is
unavailable, Emacs runs GDB in all-stop mode. The variable takes
effect when Emacs begins a debugging session; if you change its value,
you should restart any active debugging session.
When a thread stops in non-stop mode, Emacs usually switches to that
thread. If you don't want Emacs to do this switch if another stopped
thread is already selected, change the variable
Emacs can decide whether or not to switch to the stopped thread
depending on the reason which caused the stop. Customize the variable
gdb-switch-reasons to select the stop reasons which will cause
a thread switch.
gdb-stopped-functions allows you to execute your
functions whenever some thread stops.
In non-stop mode, you can switch between different modes for GUD execution control commands.
t(the default value), interruption and continuation commands apply to all threads, so you can halt or continue all your threads with one command using
gud-cont, respectively. The ‘Go’ button is shown on the tool bar when at least one thread is stopped, whereas ‘Stop’ button is shown when at least one thread is running.
nil, only the current thread is stopped/continued. ‘Go’ and ‘Stop’ buttons on the GUD tool bar are shown depending on the state of current thread.
You can change the current value of
from the tool bar or from ‘GUD->GDB-MI’ menu.
Stepping commands always apply to the current thread.
In non-stop mode, you can interrupt/continue your threads without selecting them. Hitting i in threads buffer interrupts thread under point, c continues it, s steps through. More such commands may be added in the future.
Note that when you interrupt a thread, it stops with the
‘signal received’ reason. If that reason is included in your
gdb-switch-reasons (it is by default), Emacs will switch to