gdb调试 fork程序 设置跟踪

使用gdb调试的时候,gdb只能跟踪一个进程。

 

可以在fork函数调用之前,通过指令设置gdb调试工具跟踪父进程或子进程。

默认情况下gdb是跟踪父进程的。

 

set follow-fork-mode child 命令设置gdbfork之后跟踪子进程。

set follow-fork-mode parent设置跟踪父进程。

 

注意: 一定要在fork函数调用之前设置。

 


程序测试:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int main(void)

{

    pid_t pid;

    printf("你是我的削苹果\n");

   

    pid = fork();

    if(pid==-1){

       perror("fork error");

       exit(1);

    }else if(pid == 0){

       printf("child is here. pid = %u,ppid = %u\n", getpid(), getppid());

    }else{

       printf("parent is here. pid = %u,ppid = %u\n", getpid(), getppid());

       sleep(1);

    }

   

    return 0;

}

 

编译、调试:

yu@ubuntu:~/cplusplus/fork创建进程$ gcc fork.c -o fork -g

yu@ubuntu:~/cplusplus/fork创建进程$ gdb fork

 

开始调试,设置跟踪子进程:

(gdb)set follow-fork-mode child

(gdb)start

Temporarybreakpoint 1 at 0x40071f: file fork.c, line 7.

Starting program: /home/yu/cplusplus/fork创建进程/fork

 

Temporary breakpoint 1, main () at fork.c:7

7      printf("你是我的削苹果\n");

(gdb)n

你是我的削苹果

9      pid = fork();

(gdb)n

parentis here. pid = 2170, ppid = 2168

[Newprocess 2174]

[Switching to process 2174]    //此处已经转向跟踪子进程程序

main() at fork.c:10

10     if(pid==-1){

(gdb)n

13     }else if(pid == 0){

(gdb)n

14         printf("child is here. pid = %u,ppid = %u\n", getpid(), getppid());

(gdb)c

Continuing.

child is here. pid = 2174, ppid = 1

[Inferior2 (process 2174) exited normally]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值