Ответ 1
По умолчанию 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
, очень легко привести к тому, что нижестоящий процесс будет автоматически зависеть.