По умолчанию GDB останавливает все потоки при достижении любой точки останова и возобновляет все потоки при вводе любой команды (например, continue
, next
, step
, finish
, и т. д.), который требует, чтобы выполнялся подчиненный процесс (тот, который вы отлаживаете).
Однако вы можете сказать GDB не делать этого:
(gdb) help set scheduler-locking
Set mode for locking scheduler during execution.
off == no locking (threads may preempt at any time)
on == full locking (no thread except the current thread may run)
step == scheduler locked during every single-step operation.
In this mode, no other thread may run during a step command.
Other threads may run while stepping over a function call ('next').
Таким образом, вы захотите установить точки останова, затем set scheduler-locking on
, затем continue
или finish
в потоке 1 (поток 2 все еще остановлен), затем Ctrl-C, чтобы восстановить контроль над GDB, переключиться на поток 2 , continue
(поток 1 все еще остановлен) и т. Д.
Остерегайтесь: установив scheduler-locking on
, очень просто заставить подчиненный процесс самоблокироваться.