GDB使用

1.GDB介绍:

GDB是linux系统中最常用的程序调试器

2.GDB安装:

1)检查是否安装gdb

运行指令:

rmp -qa | grep gdb

或者

gdb --version

没安装直接安装

kali的话建议直接执行

sudo apt-get install gdb

如果是Centos,建议看这篇博客:【Linux】GDB调试教程(新手小白)_this gdb was configured as "x86_64-unknown-linux-g-CSDN博客

3.GDB入门操作

1)一些常用指令操作

命令               简写形式         说明
backtrace          bt、where       显示backtrace
break              b               设置断点,+行号表示在那一行打断点
continue           c、cont         继续执行,从一个断点处,直接运行至下一个断点处【VS下不断按F5】
delete             d               删除断点
finish                             运行到函数结束
info breakpoints                   显示断点信息
next               n               执行下一行
print              p               显示表达式,打印变量值
run                r               运行程序
step               s               一次执行一行,包括函数内部
x                                  显示内存内容
until              u               执行到指定行
其他命令
directory          dir             插入目录
disable            dis             禁用断点
down               do              在当前调用的栈帧中选择要显示的栈帧
edit               e               编辑文件或者函数
frame              f               选择要显示的栈帧
forward-search     fo              向前搜索
generate-core-file gcore           生成内核转存储
help                h              显示帮助一览
info                i              显示信息
list                l              显示函数名或行
nexti               ni             执行下一行(以汇编代码为单位)
print-object        po             显示目标信息
sharelibrary        share          加载共享的符号
stepi               si             执行下一行
disable b(breakpoint) + 编号 —— 使一个断点无效【禁用断点】
n(next) —— 逐过程【相当于F10,为了查找是哪个函数出错了】
display —— 跟踪查看一个变量,每次停下来都显示它的值【变量/结构体…】

2)创建调试程序

这里说一下为什么要用-g,因为-g表示把文件编译成debug形式,可以执行调试,如果gcc编译的时候没有加上-g参数,那么就不会保留调试参数,就不能用gdb调试)

vim test.c
gcc -g -o test.exe test.c

进入test.c后按i进入编辑模式,写好代码后按esc,然后按 : 再按wq保存退出,接着就可以执行下面的指令了

3)启动gdb

程序发生异常崩溃时,系统可以将崩溃时的内存数据保留下来,通常称为core文件,gdb可以调试这种文件,所以我们可以打开core dump功能

ulimit -a

如果 core file size(core 文件大小)对应的值为 0,表示当前系统未开启 core dump 功能

2024-04-23T13:34:02.png

开启

ulimit -c unlimited

启动gdb开始调试文件

​![image](assets/image-20240401213017-7rfgmco.png)​

​![image](assets/image-20240401212819-jrsyhb3.png)​

​![image](assets/image-20240401213157-8xsxppk.png)​

​![image](assets/image-20240401213346-akjxpos.png)​

参考文章:【Linux】GDB调试教程(新手小白)_this gdb was configured as "x86_64-unknown-linux-g-CSDN博客

               [【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?)_linux gdb标准输入-CSDN博客](https://blog.csdn.net/weixin_45031801/article/details/134399664)

至此,gdb调试器的学习已经结束了