Linux并发程序设计(4):GDB调试多进程程序

目录

前言

一、介绍

二、测试

2.1 测试代码 

2.2 编译 

2.3 跟踪单个进程

2.3.1 使用start单步运行程序 

2.3.2 单步调试

2.3.3 设置跟进子进程代码 

2.4 跟踪多个进程

2.4.1 设置根据子进程代码

2.4.2 设置默认跟踪多个进程 

2.4.3 获取进程列表信息 

2.4.4 切换跟踪进程

三、总结 


前言

本文介绍使用GDB调试多进程程序的linux指令,并进行相关示例的演示。

一、介绍

GDB是UNIX及UNIX-like下的调试工具

一般来说,GDB主要帮助你完成下面四个方面的功能:

  1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
  2. 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
  3. 当程序被停住时,可以检查此时你的程序中所发生的事。
  4. 你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

二、测试

2.1 测试代码 

#include <stdio.h>
#include <unistd.h>

int main(int argc,char **argv)
{
        pid_t pid;
        printf("before fork\n");
        pid = fork();
        if(pid>0)
        {
                printf("This is father process\n");
                printf("pid = %d\n",(int)pid);
                printf("father after fork\n");
                while(1)
                {
                        sleep(1);
                        printf("father sleep\n");
                }
        }
        else if(pid == 0)
        {
                printf("This is chiled process\n");
                printf("pid = %d\n",(int)pid);
                printf("child after fork\n");

                while(1)
                {

2.2 编译 

使用gcc编译的时候注意加上"-g"

gcc -g -o fork_t fork_t.c

如果没有安装gdb,先安装一下。  

apt install gdb

2.3 跟踪单个进程

2.3.1 使用start单步运行程序 

start

2.3.2 单步调试

n

2.3.3 设置跟进子进程代码 

set follow-fork-mode child

我们可以看到,GDB已经脱离父进程,只进行子进程的调试 

2.4 跟踪多个进程

如果我们想同时调试父子进程 

2.4.1 设置根据子进程代码

set follow-fork-mode child

2.4.2 设置默认跟踪多个进程 

set detach-on-fork off

此命令默认为on,所以会默认只跟踪一个进程  

我们设置完跟踪多个进程,继续单步运行,可以看到目前还是在跟踪子进程

2.4.3 获取进程列表信息 

info inferiors 

 可以看到目前的*在子进程上。

2.4.4 切换跟踪进程

inferior 1

切换进程后,进行单步调试,我看可以看到GDB已经成功的跟踪了父进程啦! 

三、总结 

本文通过实践测试介绍了GDB调试的相关指令并进行了演示。

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值