Linux GDB的简单使用

功能

一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

GDB的安装(使用gef插件)

注意 : 为了更方便的使用gdb 一定要安装gdb插件gef

1、安装gdb

sudo apt-get install gdb

2、安装git

sudo apt-get install git

3、安装git插件

git clone git://github.com/gatieme/GdbPlugins.git ~/GdbPlugins

4、使用GDB时,附带上gef插件

echo "source ~/GdbPlugins/gef/gef.py" > ~/.gdbinit 

GDB常用的指令

help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写 h

run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写 r

run argv[1] argv[2]:调试时命令行传参

list:查看原代码,每次只能显示10行,如果需要再显示后面的代码时,可以再次使用list指令或直接回车(list n:从第n行开始查看代码;list < 函数名 >:查看具体函数),简写 l

set:设置变量的值

next:单步调试(逐过程,函数直接执行),简写 n

step:单步调试(逐语句:跳入自定义函数内部执行),简写 s

backtrace:查看函数的调用的栈帧和层级关系,简写 bt

info locals:打印出当前函数中所有局部变量及其值,简写 i lo

info breakpoints:查看当前设置的所有断点

finish:结束当前函数,返回到函数调用点

continue:继续运行,简写c

until:执行到指定行数或者函数

print:打印值及地址,简写p

quit:退出gdb,简写q

break < num >:在第num行设置断点,简写b

delete breakpoints < num >:删除第num个断点,简写d

display:追踪查看具体变量值

undisplay:取消追踪观察变量

watch < 变量 >:被设置观察点的变量发生修改时,打印显示

i watch:显示观察点

enable breakpoints:启用断点

disable breakpoints:禁用断点

简单使用GDB的步骤

注意:gdb的对象是可执行文件,所以对于要用gdb调试的程序要编译,记住:编译时要加"- g"这个参数;如gcc demo.c -g -o gdbTest !!!

1、使用gdb运行编译生成的可执行文件

gdb xxx   //xxx为可执行文件的名称

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210228211420656.png

2、用 l 指令显示代码,来决定在哪打断点

在这里插入图片描述

技巧:如果要重复上次的指令时,可以直接按“Enter”回车键

3、用 b 指令设置断点

假设要在main函数第12行设置断点
在这里插入图片描述

4、设置完断点后,用 r 指令使程序跑起来

在这里插入图片描述
在这里插入图片描述
安装完gef插件后,每次都会自动显示寄存器、栈,当前运行到的行数等信息

5、用 s 指令或者 n 指令单步执行

6、用 p 指令查看指定的变量

p自定义输出格式:p/fmt < 变量 >

在这里插入图片描述
在这里插入图片描述

p 指令打印数组

1、直接 p <数组名>
在这里插入图片描述
2、指定开始输出的位置和指定输出的个数:p first@len
在这里插入图片描述

7、用 i lo 指令查看在当前函数里的所有局部变量的值

8、用 watch 指令监视某一变量,当变量发生变化时,会将其值打印出来

9、用 c 指令恢复程序的运行直到程序结束,或到达下一个断点

10、用 q 指令退出gdb

猜你喜欢

转载自blog.csdn.net/weixin_50438937/article/details/114239182