gdb调试命令总结

之前已经写过一篇博客《Linux下使用gdb调试C/C++程序》,是一些简单的用法,今天的这一篇可以算是进阶篇。

一、关于多线程的使用命令

       1、thread

        查看当前线程的ID,这ID是GDB对线程的编号,从1开始的。以下所说的线程ID,都是这种ID。

        2、info thread 

        查看当前可以被调试的线程,ID前面有*号的表示GDB当前所在的线程。

        3、info threads

         查看所有的线程

        4、thread  thread_number

        GDB切换到线程ID为number的线程

       5、thread  apply  thread_number  command

        针对某一个线程执行GDB命令,例如  thread  apply  5  c ,只针对线程ID为5的线程执行continue命令,在多线程调试中,由于一个断点,

        会在多个线程中停住,但是有时候,只想观察某一个线程,就得采用这样的做法。

        扩展:thread  apply  all  bt ,查看所有线程的调用栈。all 表示所有线程。

       5、set  scheduler-locking   on/off

       可理解为GDB的线程调度锁,与4中的功能类似,当为on时,表示打开锁,GDB只在当前线程执行,不会切换到其他线程。

       为off,则关闭锁。

 

二、关于GDB启动的使用命令

        1、gdb  -p   process_id

         调试一个正在运行的进程,有时候要调试一个fork出来的子进程,它正在运行,必须这样的做才行。

          process_id是进程ID,通过ps -aux或者pidof相关命令得到。

         扩展:直接启动GDB,执行 attach  process_id 也可以有一样的效果。

        2、gdb  --args  ./test.exe   100

        有时候程序启动需要传入参数,因此gdb 后面必须跟--args选项。因此这个命令表示用GDB启动test.exe程序,该程序传入参数100。

         扩展:另一种做法:1、gdb  ./test.exe      2. set  args  100   3、run

 

三、其他命令

        1、set  var  number=3

         number是一个整型变量,设定它的值为3,即修改变量的值。

       2、b   15   if  number==5

         设置条件断点,如果number等于5,将在15行停住。当然行号也可以函数名。

       3、set  print  element  0

        在用p命令打印string类型时,若字符串比较长,比如大概超过400字节,就只打印出一部分,这个命令,可以突破此限制。

         

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值