在gdb中,如何调试fork()后的子进程?

34

在调用fork之后,当前进程将调用exit(0)

但子进程将继续运行。

switch(fork())
{
  case -1:
    exit(1);
  case 0:
    // child process continues
    break;
  default:
    // the current process exits
    exit(0);
}

在这种情况下,我该如何继续调试子进程?


1
关于exec:https://dev59.com/BHRC5IYBdhLWcg3wMeLg#43099366 - Ciro Santilli OurBigBook.com
1个回答

52

看看这个。使用:

set follow-fork-mode <mode>

将调试器响应设置为fork或vfork的程序调用。调用fork或vfork会创建一个新进程。<mode>参数可以是:

parent: 在fork之后调试原始进程。子进程无障碍运行。这是默认设置。

child: 在fork之后调试新进程。父进程无障碍运行。


4
有没有一种方法可以同时调试父进程和子进程? - Bin Zhou
不,gdb不支持同时调试多个进程。但是你可以使用set detach-on-fork off来阻塞父进程直到子进程退出。如果你的进程不需要同时运行,这样做就可以了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接