gdb调试多线程多进程程序

gdb多进程:

多进程时,进入调试状态后,默认调试主进程。 

1. 查找fork出子进程的代码在第几行,然后打上断点。 
这里写图片描述

2.运行至断点处,info feriors可查看当前调试的进程 
这里写图片描述

3.设置follow-fork-mode 的值为child,表示只调试的子进程,再查看当前调试进程发现变成了新产生出来的进程,即子进程。follow-fork-mode(默认值是parent)和detach-on-fork(默认值是on)结合使用。4种组合的意义分别如下:

follow-fork-mode detach-on-fork 说明
parent on 只调试父进程
child on 只调试子进程
parent off 同时调试两个进程,gdb跟主进程,子进程block在fork位置
child off 同时调试两个进程,gdb跟子进程,主进程block在fork位置

所以我们set follow-fork-mode child ,detach-on-fork没有设置,默认是on,即第二种使用场景,只调试子进程。 
这里写图片描述 
4.可以使用inferior+进程编号(即info inferiors后显示在第一列的号码)来切换当前正在调试的进程。 
这里写图片描述 
以上就是调试多进程用到的命令。

gdb多线程:

1.在创建完线程的代码处打上断点,运行至断点处,info threads查看当前进程内的线程。可以看到,当前正在调试的是主线程。 

这里写图片描述 
2.和多进程类似,可以使用thread+线程编号切换当前正在调试的线程。 
所以,thread 后*号到了编号为3的线程的前面,表示当前调试的就是该线程。 
这里写图片描述 
3.使用thread apply [编号…] [命令]可以让多个线程同时执行某条命令。 
如:让2,3线程同时向下执行一步。也可以使用thread apply all [命令],让所有线程执行某个调试命令。 
这里写图片描述 
4.可以设置scheduler-locking参数(默认值为off),控制是多个线程同时运行还是只运行某个线程,它的取值和意义如下:

scheduler-locking 意义
on 当前调试的线程单独运行
off 所有线程一起执行
step 没有发生函数调用时单独执行当前线程,有函数调用时所有线程一起执行

这里写图片描述 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值