В режиме полного останова (единственный режим, поддерживаемый в настоящее время выпущенными версиями) GDB остановит все потоки, как только остановится любой поток (из-за точки останова или сигнала).
Когда вы продолжите остановленный поток, все другие потоки также продолжатся, если вы не выполните set scheduler-locking on
. Обратите внимание, что любой из step
, next
и т. Д. продолжает текущий (и, следовательно, все остальные) поток (после установки временной точки останова в соответствующем месте, например, на следующей строке для команды next
) .
Возможно, вы хотите иметь возможность одношаговой остановки потока без возобновления работы всех остальных потоков? В этом случае set scheduler-locking on
является ответом.
Осторожно: если другой поток удерживает блокировку, вы включаете блокировку планировщика, и ваш текущий поток также требует такой же блокировки, ваша программа будет ждать бесконечно долго. Это часто происходит, если один из потоков находится внутри malloc / realloc, и ваш текущий оператор пытается выделить немного памяти.
Также не забудьте set scheduler-locking off
до continue
, иначе только текущий поток будет продвигаться вперед.