GDB调试多线程代码

最近在看C++ Concurrency in Action,有些代码需要调试查看运行过程,结合以前单线程的调试和网上的一些资料进行多线程调试。在此简单记录一下步骤,方便日后使用。

1、编译

gcc -g -ggdb -std=c++11 -pthread test.cpp -o test

2、gdb常用命令

r(run)启动 
start启动-停留在main函数,分步调试 
n(next)下一条指令 
s(step)下一条指令,可进入函数,原函数无法进入 
q(quit)退出gdb 
set  args 10,6 设置输入参数 
set argc=2  动态设置变量值 
list显示代码(list fun.c:1查看指定的文件代码) 
b(break) 1717行打断点 
b  sum 在sum函数打断点 
b func.c:11 为func.c的11行打断点 
Info b查看断点信息 
del  编号  删除第6编号的断点 
p(print) 变量  查看变量的值 
ptype 变量   查看变量类型 
c(continue)跳到下一断点 
display 变量 跟踪变量的值,查看变量什么时候变化 
undisplay 编号  不跟踪 
b 行号 if i==1设置条件断点 

3、常用的多线程调试命令

  • pstree -p 主线程id 以树的形式查看线程关系
  • pstack 线程号 查看线程结构(pstack可能会出错,可以在网上找个shell源码就行)
  • info inferiors 查看进程
  • info threads 查看线程
  • bt 查看线程栈结构
  • thread n 切换到n号线程
  • set scheduler-locking on 锁定当前线程,类似只看当前线程执行
  • set scheduler-locking off 默认不锁定,都执行
  • thread apply ID1 ID2 command 让id1 id2执行gdb命令
  • thread apply all command 所有的线程都执行

4、使用

4.1 进入调试
gdb test
r

在这里插入图片描述
Ctrl+c 暂定运行

4.2 查看线程信息
info thread

在这里插入图片描述

bt

在这里插入图片描述

4.3、切换线程
thread 2

在这里插入图片描述

4.4、锁定线程
set scheduler-locking on

在这里插入图片描述

4.5、取消锁定
set scheduler-locking off

在这里插入图片描述
参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值