standardmäßig GDB alle Themen stoppt, wenn ein Haltepunkt erreicht wird, und nimmt alle Threads, wenn Sie einen Befehl erteilen (wie continue
, next
, step
, finish
usw.), die erfordert, dass der untere Prozess (der Sie debuggen) starten zu starten.
Sie können jedoch GDB sagen, nicht zu tun, dass:
(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').
So möchten Sie Breakpoints setzen, dann set scheduler-locking on
, dann continue
oder finish
in Thread 1 (Gewinde 2 gestoppt noch), dann Ctrl-C Steuerung von GDB wiederzuerlangen, Schalter 2, continue
einzufädeln (Gewinde 1 gestoppt noch) usw.
Vorsicht: durch Einstellung scheduler-locking on
es sehr einfach ist, den Prozess zu inferior Selbst deadlock zu verursachen.
Siehe die GDB-Handbuchseite zu [Debuggen von Programmen mit mehreren Threads] (http://sourceware.org/gdb/current/onlinedocs/gdb/Threads.html#Threads), speziell den Befehl 'thread' um den aktiven Thread zu wechseln. – Hasturkun