Debugging programs with multiple processes
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 sleep() in the code that the child process executes after the fork. It may be useful to sleep only if a certain environment variable is set, or a certain file exists, so that the delay doesn't occur when you don't want to run GDB on the child.
- While the child is sleeping, 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.