【Linux】基础开发工具gdb
📅 2026/7/29 4:46:40
👁️ 阅读次数
📝 编程学习
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退出
- 输入
list或l:显示源代码
- 输入
l num或list num:查看文件第num行附近代码
- 输入
run或r:运行程序
打断点时,使用gdb不方便查看断点,以下使用cgdb进行调试
- 输入
b 行号:设置断点 - 输入
info b 行号:查看所有断点信息
- 输入
d num:删除断点
n或next:逐过程单步执行面部进入函数内部
s或step:逐语句单步执行,进入函数内部
断点为第18行:
- 输入
p 变量:打印变量或表达式的值
p为单次打印,单步执行,不会自动刷新,打印变量的值不会变化
display 变量名:跟踪监视,程序每次暂停,自动打印变量undisplay num:取消对先前变量的跟踪
- 输入
until x:跳转至x行
- 输入
finish:执行到当前函数结束,暂停在函数调用处,打印返回值
$1是 gdb 保存返回值的变量,5050就是 Sum 函数 return 带回的结果
- 输入
continue或c:从当前断点直接运行到下一个断点
disable breakpoints:禁用断点enable breakpoints:启用被禁用的断点backtrace或bt:查看函数调用栈info locals:查看当前函数局部变量set var:修改变量的值
编程学习
技术分享
实战经验