BBS水木清华站∶精华区
<摘自 `Debugging with GDB', Section 4.11, page 32>
GDB has no special support for debugging programs which create additional
processes using the fork() function. When a program forks, GDB will continue
to debug the parent process and the child process will run unimpeded. If you
have set a breakpoint in any code which the child then executes, the child
will get a SIGTRAP signal which (unless it catches the signal) will cause it
to terminate.
However, if you want to debug the child process there is a workaround which
isn't too painful. Put a call to sleep in the code which 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 need
not occur when you don't want ot run GDB on the child. While the child is
sleeping, use the `ps' program to get its process ID. Then tell GDB (a new
invocation of GDB if you are also debugging the parent process) to attach to
the child process (see Section 4.7 [Attach], page 28). From that point on you
can debug the process just like any other process which you attached to.
BBS水木清华站∶精华区