• Linux_gdb使用


    使用

    用gdb打开一个程序

    首先我们写一段累加的源代码,用于调试

    gdbtest.c

    #include
    
    int AddToTop(int top)
    {
      int res = 0;
      for(int i = 0; i <= top; i++)
      {
        res += i;
      }
      return res;
    }
    
    int main()
    {
      int result = 0;
      int top = 100;
      result = AddToTop(top);
      printf("%d\n",result);
      return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在使用gdb调试之前,必须先形成可执行程序:

    gcc gdbtest.c -o gdbtest

    接下来使用gdb调试此可执行程序

    gdb gdbtest

    小贴士:
    如果没有安装过gdb,可执行如下命令安装

    yum -install gdb

    但提示当前程序没有调试信号被发现,这是因为gcc生成的可执行程序默认是release版本的,但如果要调试,必须是debug版本的

    提示:可输入quit退出gdb

    所以,我们使用**-g**选项,让gcc生成debug版本的程序

    gcc gdbtest.c -o gdbtest_g -std=c99 -g

    可以发现,debug版本的可执行程序会比release大一点。

    为了更直观的看到多出来的那一部分:

    可使用如下指令以段的方式读取可执行程序:

    readelf -S gdbtest

    如果去读debug版本的,可以发现有一些关于debug的信息,但是release版本的并没有

    接下来,我们使用gdb打开debug版本的程序

    gdb gdbtest_g

    调试部分

    • 显示代码

      list/l

      可使用list(或简写为l),显示源代码

      • 后面可以加数字,代表从第几行开始显示

      • 后面可以加函数名,如main,代表显示此函数

      在当前状态下直接输入回车,会继续上一条命令,把剩下的代码显示出来

    • 打断点

      break/b

      使用break(可简写为b)打断点

      • 后面只加数字:在此行打断点
      • 再加if 判断语句,添加条件断点(如:b 8 if i == 20,表示如果i = 20,在20行停止)
      • 查看所有断点信息:info b
    • 删除断点

      delete/d

      后面加断点的编号

    • 运行到断点

      run/r

    • 从一个断点运行到下一个断点

      continue

    • 查看变量值

      print/p

      display

      后面直接加查看的变量名,如:p result

      但是,如果继续执行,这个变量就不能持续监视了,所以使用display 变量名,就会常显示此变量

      如果要去掉某个常显示:

      undisplay 编号

      如:undisplay 1

    • 逐语句执行(会跳入函数内部)

      step/s

    • 逐过程执行(遇到函数调用不会进入函数内部,直接执行完整个函数)

      next/n

      注意:如果函数内部有断点,会在内部的断点处停下来

    • 查看调用堆栈

      bt

    • 直接运行到某一行

      until 行号

    • 运行完当前函数停下来

      finish

  • 相关阅读:
    JS生成器的介绍
    【Vue五分钟】 五分钟让你读懂什么是事件绑定
    C# 第五章『面向对象』◆第4节:析构函数destructor
    【CCF】第30次csp认证——202305-1重复局面
    一年跳一行,南京校区小哥哥最终选择在软件测试扎根,入职就拿9k!
    2023第二届金育杯金融智能投顾大赛全国总决赛圆满完成
    AUTOSAR 包 MC-ISAR 安装指南
    多重背包问题
    Linux 深入理解Linux文件系统与日志分析
    C#开发的OpenRA游戏之金钱系统(4)
  • 原文地址:https://blog.csdn.net/yue152152/article/details/127577154