GDB has no special support for debugging programs that create
additional processes using the fork() function.
When a program forks, GDB continues to debug the parent process, and the
child process runs unimpeded. If you've set a breakpoint in any
code that the child then executes, the child gets a SIGTRAP
signal, which (unless it catches the signal) causes it to terminate.
However, if you want to debug the child process, there's a workaround that isn't too painful:
- Put a call to
raise(SIGSTOP)
in the code that the child process executes after the
fork().
It may be useful to stop only if a certain environment variable is set, or a certain file exists,
so that the child doesn't stop when you're running it without GDB.
- While the child is stopped, get its process ID by using the
pidin
utility (see the Utilities Reference) or by using GDB's
info pidlist command.
- Tell GDB (a new invocation of GDB if you're also debugging the parent process) to attach to
the child process (see "Debugging an already-running process").
From that point on you can debug the child process just like any other process that you've attached to.