gdb调试多进程多线程

最近碰到一个多进程加多线程异常退出的bug,通过gdb调试找到root cause。记录以下过程。

在这个例子中,binary1调用了binary2,binary2是个多线程,bug就出在bianry2其中一个线程上。由于bianry2是在binary1中调用的,不适合使用“gdb binary”的形式进行debug,只能在程序运行之后找到birnary2的pid,然后通过pid调试。

进入调试终端后看到的都是主进程的上下文,而问题出在其中一个线程,所以要再进入对应线程调试终端。首先用info threads查看所有线程,再用thread thread_id进入相应线程上下文。这个时候就可以开始调试了。

这里有个问题。一开始bianry2进程可能还没有fork出出错的线程,用info threads是找不到对应线程的。我的办法是结合进程的log,大概定位到问题代码,然后在对应函数里面wait一段时间,这样我们在用gdb之前可以先等上一段时间,确定代码已经进入问题函数再去用gdb调试。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值