多线程下的GDB调试方法

在Linux系统下做程序开发,GDB基本上是绕不过去的一门技术。很多初学者觉得GDB调试比较难,会本能的排斥,转而使用逐级增加日志打印的方式来调试。这种方式比较容易,但是相对来说比较麻烦,需要修改本地代码、编译、部署,花费的时间比较长。如果打印的部分没有达到预期目标,还需要反复修改代码、编译、部署。所以学会GDB调试程序是你进阶的一大步。

启动GDB调试

启动GDB分为两种,一种是直接使用GDB启动调试程序,另外一种是程序已经启动了,现在我们需要使用GDB来调试它。第一种,假定程序名为test,直接gdb test,然后再输入r(run的简写),那么程序就会以GDB的方式启动;第二种,通过ps命令查看test的PID,然后gdb attach PID(有时候需要sudo权限,可以sudo gdb attach PID)。

开始调试

设置断点

调试第一步就是打断点,这样程序运行到断点处就会停下来。如果程序已经启动,可以先按ctrl+c使程序停下来进入交互界面。设置断点主要有以下方式:1、b 文件名:行号  2、b 文件名::函数名(b是break的简写),设置完成之后可以通过info b命令查看当前设置的断点。断点设置以后我们输入c回车使程序继续运行。

打印信息

程序在断点处暂停以后,我们可以通过打印一些变量的信息来辅助我们调试程序。命令是p 变量名(p是print的简写)

单步调试

如果打印的信息没有问题,很多时候我们就需要单步调试配合打印来定位问题了,GDB单步主要有两个命令s(step的简写)和n(next的简写),这两个命令的区别在于step碰到子函数时会进入子函数,而next则不会进入子函数,如果你确保子函数没有问题则可以用next,反之则用step。

其他命令

多线程下可以使用info thread命令查看当前程序开启了多少个线程,然后通过thread 线程编号(info thread命令的Id栏)可以进入该线程的调试现场。这时输入bt就可以查看当前线程的调用栈信息了。thread apply all bt则可以查看所有的线程的调用栈。

结尾

以上就是GDB调试程序的一些常用命令,实际上GDB非常强大,可以在不重新编译的情况下临时修改代码逻辑来进行验证,大家有空的话可以自己再深入学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值