When debugging a multi-threaded program, should a debugger stop all threads when any thread stops, or should it stop only those threads that have something to report, like a breakpoint hit? When debugging a live system, the latter approach may be less intrusive, as threads other than those under inspection can continue to respond to external events. We have implemented this behavior, which we call non-stop debugging, in the GNU Debugger, GDB. We have adapted GDB’s control commands, strengthened GDB’s event loop, extended GDB’s remote protocol, and implemented new techniques for inserting, removing, and stepping past breakpoints.
This project lifts long-standing restrictions in GDB’s thread support, using a number of interesting techniques. It opens a way to supporting multi-process and multi-core debugging.