对于程序中创建子进程的情况,进行gdb调试时会默认选择父进程进行调试,假如需要对子进程进行调试就需要使用特殊方法。

共有两种方法可供选择:

目录

一.attach子进程PID

①.运行进程

②获取进程PID(示例调试子进程)

③打开gdb并将attach进程PID

④开始调试

二.set follow-fork-mode mode

①选择程序进入gdb调试

②set detach-on-fork off(可不选择该指令)

③set follow-fork-mode child(以调试子进程为例)

④set follow-fork-mode parent(切换调试父进程)


一.attach子进程PID

这个方式就是当进程运行时,获取进程PID然后在进入gdb调试时,通过attach指令调试PID对用的进程。

本质就是指定PID然后调试,并不是真正的进程切换调试。

示例代码:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main()
{pid_t id = fork();if(id == 0){while(1){printf("%s\n", "i am child");sleep(1);}}else{while(1){printf("%s\n", "i am father");sleep(3);                                                      }}return 0;
}

过程如下:

①.运行进程

②获取进程PID(示例调试子进程)

③打开gdb并将attach进程PID

④开始调试

二.set follow-fork-mode mode

mode的可供选择值有两个parent与child,对应父进程与子进程。

(gdb) set follow-fork-mode parent//调试父进程(gdb) set follow-fork-mode child//调试子进程

这个只能选择fork的第一个子进程作为child进行调试。

还是使用上述示例代码,过程如下:

①选择程序进入gdb调试

②set detach-on-fork off(可不选择该指令)

该gdb指令是当调试父或子进程时,另一个会自动暂停在fork位置。这里使用是为了便于观察

③set follow-fork-mode child(以调试子进程为例)

④set follow-fork-mode parent(切换调试父进程)

The darkest hour is that before the dawn—— Fuller 


如有错误,敬请斧正

Linux——gdb调试时多进程切换方法(attach/follow-fork-mode)相关推荐

  1. 使用GDB调试产生多进程的程序

    如果一个进程fork了多个进程,这时使用GBD工具对程序进行调试会如何呢? 实际上,GDB 没有对多进程程序调试提供直接支持.例如,使用GDB调试某个进程,如果该进程fork了子进程,GDB会继续调试 ...

  2. linux子系统gdp调试,Linux GDB调试 详述

    今天来分享下gdb的简单调试,我这里写了个例子 三个.c文件 func1.c func2.c main.c 首先生成可调试的执行文件 gcc -g func1.c func2.c main.c -o ...

  3. gdb调试时,Program received signal SIGPIPE, Broken pipe.

    今天在gdb调试时,发现总是出现Program received signal SIGPIPE, Broken pipe,搜索了网上的资料,发现是在调试时,接收到了SIGPIPE这个signal信号导 ...

  4. [Linux]gdb调试多进程多线程例程

    gdb相信学linux的同学已经比较熟悉了吧,它是linux下代码调试工具.我们在写c语言,c++的代码时经常会用到,它有一些常用的调试命令: run(r):运行程序,如果有断点在下一个断点处停止 s ...

  5. Linux gdb调试(4):多进程与多线程调试

    一,gdb的基础知识 1>介绍: gdb是Linux环境下的代码调试工具. 2>使用:需要在源代码生成的时候加上 -g 选项. 3>开始使用: gdb binFile 4>退出 ...

  6. Linux GDB调试完全教程

    转自 http://blog.csdn.net/gatieme 本文将主要介绍linux下的强大调试工具是怎么完成这些工作的. 之所以要调试程序,是因为程序的运行结果和预期结果不一致,或者程序出现运行 ...

  7. 【全网最暴力解决方案】使用gdb调试时遭遇“Missing separate debuginfos, use: debuginfo-install glibc....”报错信息

    问题现象 日前在CentOS 6虚拟机上使用gdb调试一个由简单的.c文件编译生成的可执行程序遭遇如下gdb报错 Missing separate debuginfos, use: debuginfo ...

  8. Linux GDB调试死锁问题

    1. 死锁介绍 1.1 锁的简介 由于多线程的模式下,各个线程并发运行(注意"并发和"并行"的区别),为了保证各个线程对公共资源的访问时出现数据不一致性的问题,出现了锁的 ...

  9. Linux GDB调试

    Linux 段错误调试 core 文件调试 编译时 加上 -g 使编译出的文件带 调试信息 gcc -g main.c -o main 使编译出的可执行文件带调试信息gdb main //对 main ...

最新文章

  1. js文件引用方式及其同步执行与异步执行
  2. Pandas.DataFrame转置
  3. 深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天
  4. java面向对象特性_java面向对象编程三大特性
  5. OpenGL基础17:颜色
  6. JavaWeb教程———过滤器
  7. 二叉搜索树前序序列转后序序列(或相反)
  8. 利用大白菜制作多系统启动U盘(ubuntu+windows)
  9. mysql创建表说明_MYSQL库表的创建以及说明
  10. PTA——基础编程题 | 7-27 冒泡法排序 (20分)
  11. 设计师必看的十部电影
  12. 用友BIP对接外部旺店通企业版奇门系统
  13. mysql 编程算法_十大编程算法助程序员走上高手之路
  14. 计算机网络管理员设备清单,网络管理员资料:计算机网络互联设备路由器
  15. minecraft服务器搭建教程_Minecraft我的世界服务端搭建教程,附优化启动参数
  16. “假离婚、真套现” 解禁潮将至 拉卡拉上演“一出好戏”
  17. UltraEdit-32 v14.10 简体中文版
  18. java 根据特殊字符截取字符串_java中如何截取特殊字符串
  19. 阿里云盘小白羊版:一款支持满速上传下载的阿里云盘
  20. HNUST 2204 买水果

热门文章

  1. ubuntu安装后卸载预装软件
  2. 利用微信第三方平台制作微信抽奖的优势以及一个成功的微信抽奖活动方案分享!
  3. POJ2993 Emag eht htiw Em Pleh
  4. 轻量级Kubernetes之k3s:4:离线安装与部署
  5. win7系统不能保存文档到服务器,win7系统正确配置服务器
  6. [原]利用ps制作金属纹理效果
  7. 计算机无法检查出来的错误,Win7系统电脑显卡出现错误时怎么检测(图文)
  8. 使用Scrapy爬取笑话并存储到文件和MySQL
  9. 我正在互站卖源码的日子●续
  10. 对SQL的概述(发展历程、特点、基本概念)