3.2.7. Debugging forking or threaded programs with GDB
Some programs use forking or threads to achieve parallel code execution. To debug multiple simultaneous execution paths, you can use a variety of commands based on your use case.
- Debugging forked programs with GDB
Forking is a situation when a program (parent) creates an independent copy of itself (child). Use the following settings and commands to affect what GDB does when a fork occurs:
The
follow-fork-modesetting controls whether GDB follows the parent or the child after the fork.set follow-fork-mode parent- After a fork, debug the parent process. This is the default.
set follow-fork-mode child- After a fork, debug the child process.
show follow-fork-mode-
Display the current setting of
follow-fork-mode.
The
set detach-on-forksetting controls whether the GDB keeps control of the other (not followed) process or leaves it to run.set detach-on-fork on-
The process which is not followed (depending on the value of
follow-fork-mode) is detached and runs independently. This is the default. set detach-on-fork off-
GDB keeps control of both processes. The process which is followed (depending on the value of
follow-fork-mode) is debugged as usual, while the other is suspended. show detach-on-fork-
Display the current setting of
detach-on-fork.
- Debugging Threaded Programs with GDB
-
GDB has the ability to debug individual threads, and to manipulate and examine them independently. To make GDB stop only the thread that is examined, use the commands
set non-stop onandset target-async on. You can add these commands to the.gdbinitfile. After that functionality is turned on, GDB is ready to conduct thread debugging.
GDB uses a concept of current thread. By default, commands apply to the current thread only.
info threads-
Display a list of threads with their
idandgidnumbers, indicating the current thread. thread id-
Set the thread with the specified
idas the current thread. thread apply ids command-
Apply the command
commandto all threads listed byids. Theidsoption is a space-separated list of thread ids. A special valueallapplies the command to all threads. break location thread id if condition-
Set a breakpoint at a certain
locationwith a certainconditiononly for the thread numberid. watch expression thread id-
Set a watchpoint defined by
expressiononly for the thread numberid. command&-
Run command
commandand return immediately to the gdb prompt(gdb), continuing any code execution in the background. interrupt- Halt execution in the background.
Additional resources