Linux GDB的简单使用
- 功能
- GDB的安装(使用gef插件)
- GDB常用的指令
- 简单使用GDB的步骤
-
- 注意:gdb的对象是可执行文件,所以对于要用gdb调试的程序要编译,记住:编译时要加"- g"这个参数;如gcc demo.c -g -o gdbTest !!!
- 1、使用gdb运行编译生成的可执行文件
- 2、用 l 指令显示代码,来决定在哪打断点
- 3、用 b 指令设置断点
- 4、设置完断点后,用 r 指令使程序跑起来
- 5、用 s 指令或者 n 指令单步执行
- 6、用 p 指令查看指定的变量
- 7、用 i lo 指令查看在当前函数里的所有局部变量的值
- 8、用 watch 指令监视某一变量,当变量发生变化时,会将其值打印出来
- 9、用 c 指令恢复程序的运行直到程序结束,或到达下一个断点
- 10、用 q 指令退出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为可执行文件的名称
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