当你在程序中使用fork(),如果用gdb来调试.不管是你在子进程是否设置断点.你都只能在父进程单步调试,而没办法进入到子进程当中进行单步调试.因为gdb的所有处理(查看堆栈,内存,变量值)都是针对当前进程空间.
那么是否就没办法调试多进程程序的子进程代码呢?办法还是有的,一般的标准方法是再打开一个gdb用attach功能来调试子进程.gdb attach功能是不执行被调试程序,而是把gdb“挂”到一个已经运行的进程之上来进行调试,这挂载的动作称为attach.当然也包括挂载子进程。
首先我们看一个如下简单的多进程程序。
/*
Author: Andrew Huangbluedrum@163.com
debug multi-process by gdb.
*/
#include
#include
#include
#include
#define PRINT_INT(e) printf("%s=%d\n",#e,e)
int main()
{
pid_t pid;
int i,val = 100;
printf("process id %d\n",getpid());
pid = fork();
PRINT_INT(val);
if(pid == 0)
{/* child process */
val+=100;
printf("child process id %d,parent id %d\n",getpid(),getppid());
PRINT_INT(val);
i = 0;