【Linux】基础开发工具gdb

📅 2026/7/29 4:46:40 👁️ 阅读次数 📝 编程学习
【Linux】基础开发工具gdb

Linux基础开发工具gdb

1、Debug和release

程序的发布方式有两种,Debug和release模式,Debug模式是开发者模式,用户最终用的是release,在Debug模式下,因为增加了调试信息,所以可执行文件体积较大,gcc/g++ 默认编译出来的程序是Release 版本,如果想在Debug模式下得到可执行程序,那么需要输入:

gcc mycmd.c-o mycmd-g

通过readelf mycmd-debug -S | grep debug指令,可以将二进制文件中与Debug有关的部分过滤出来,打印出mycmd-debug在Debug模式下的信息

2、gdb常用指令

mycmd.c

#include<stdio.h>intSum(ints,inte){intresult=0;inti=s;for(s;i<=e;i++){result+=i;}returnresult;}intmain(){intstart=1;intend=100;printf("I will begin\n");intn=Sum(start,end);printf("running done, result is: [%d~%d]=%d\n",start,end,n);return0;}

输入gdb,进入gdb环境

输入q退出

  • 输入listl:显示源代码

  • 输入l numlist num:查看文件第num行附近代码

  • 输入runr:运行程序

打断点时,使用gdb不方便查看断点,以下使用cgdb进行调试

  • 输入b 行号:设置断点
  • 输入info b 行号:查看所有断点信息

  • 输入d num:删除断点

  • nnext:逐过程单步执行面部进入函数内部

  • sstep:逐语句单步执行,进入函数内部

断点为第18行:

  • 输入p 变量:打印变量或表达式的值

p为单次打印,单步执行,不会自动刷新,打印变量的值不会变化

  • display 变量名:跟踪监视,程序每次暂停,自动打印变量
  • undisplay num:取消对先前变量的跟踪

  • 输入until x:跳转至x行

  • 输入finish:执行到当前函数结束,暂停在函数调用处,打印返回值

$1是 gdb 保存返回值的变量,5050就是 Sum 函数 return 带回的结果

  • 输入continuec:从当前断点直接运行到下一个断点

  • disable breakpoints:禁用断点
  • enable breakpoints:启用被禁用的断点
  • backtracebt:查看函数调用栈
  • info locals:查看当前函数局部变量
  • set var:修改变量的值