gdb pid 线程_gdb调试多线程

本文介绍了如何使用GDB进行多线程调试,包括基本命令如`info threads`、`thread`、`break`、`apply`和`scheduler-locking`。讲解了GDB多线程调试的实现思路,以及Linux环境下多线程调试的特殊性。还分享了解决多线程调试中无法看到线程信息问题的经验,即检查libpthread是否被strip并提供解决方案。
摘要由CSDN通过智能技术生成

GDB 多线程调试基本命令 实现简介 以及一个问题的解决

teawater@gmail.com

一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧。

如果程序是多进程在跑,先将其设置成单进程模式(kamailio)

查看进程中所有线程的栈调用:pstack 进程PID (pstack不是系统默认工具,需要yum安装)

gdb attach 进程ID

先介绍一下GDB多线程调试的基本命令。

info threads

显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。

前面有*的是当前调试的线程。

thread ID

切换当前调试的线程为指定ID的线程。

break thread_test.c:123 thread all

在所有线程中相应的行上设置断点

thread apply ID1 ID2 command

让一个或者多个线程执行GDB命令command。

thread apply all command

让所有被调试线程执行GDB命令command。

set scheduler-locking off|on|step

估计是实际使用过多线程调试的人都可以发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。

off 不锁定任何线程,也就是所有线程都执行,这是默认值。

on 只有当前被调试程序会执行。

step 在单步的时候,除了next过一个

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值