GDB 必会的基础操作

GDB基础操作

Step1 开始调试

  • 使用gxx -g file选项,在编译时保留调试信息
  • gdb file.out启动调试
  • image
  • 输入q退出

Step2 运行程序

  • run [args]开始运行程序

    • [args]为可选命令行参数
    • 也可以使用缩写r
  • start也可以启动程序,但是会在main函数第一行自动设置一个断点

  • 在程序运行过程中,使用run or start可以重新启动程序

  • 使用list查看源代码

    • 使用缩写l

    • l ([函数名],行号)可以显示指定函数或行号开始的代码

    • 一般gdb还会显示指定位置之前的几行代码,如图所示

    • 在这里插入图片描述

  • next执行下一行代码。注意:这个不会进入函数

  • step,缩写s,进入函数

  • continue直到下一个断点

Step3 设置断点

  • break设置断点

    • 同样的,可以使用b作为缩写
  • b linenum在(当前文件的)指定行设置断点

  • b file:line/func在指定文件的行或者函数设置断点

  • 如果你想要在没有debug支持的文件(例如没有使用-g)中设置断点。 b *(memory address)可以在指定的位置设置断点

  • 通过command,你可以在达到指定断点时,执行指令

    • (gdb) b CheckValidEmail
      Breakpoint 1 at 0x8049d87: file ../../test/testgdb.c, line 107.
      (gdb) command 1
      # Note:
      #1: 1 is the breakpoint number.
      #2: Here you can specify set of commands to execute.
      #3: To close the command block, use the "end" keyword.
      >print port
      >print IPAddr
      >print User
      >print Pwd
      >end
      (gdb)
      
  • 使用info b显示所有断点

  • ignore b-index times来忽略指定断点指定次数

  • delete(或者缩写d) b-index删除指定断点,单写一个d可以删除所有断点

Step4 打印信息

  • frame 打印当前的语句

  • backtrace 可以显示堆栈信息

    • 或者使用缩写bt
  • 使用where

  • 例如一个简单的递归程序

    • //
      // Created by Anti on 2022/11/3.
      //
      
      void stack(int x)
      {
          if(x==10)
              return;
          stack(x+1);
      }
      int main()
      {
          stack(1);
      }
      
    • 通过b stack打上一个断点,然后continue多次后使用bt查看堆栈信息

    • image

  • print打印变量

    • 缩写p

    • p 变量(int,char等)

    • p 结构化变量

      • 在这里插入图片描述

        上图为用gdb打印数组信息

    • p *pointer打印指针的值

Step5 不知道怎么分类的操作

  • 使用finish完成当前函数(运行到直到这个函数返回之前)
    • 缩写fin
    • 会被断点打断
  • return [exp]从当前函数返回,也可以指定一个值返回
  • 使用watch <variable name>来给指定变量添加一个watchpoint,当该变量发生变化时停止程序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值