一、GDB简介
- GDB 是GUN 开源组织发布的一款强大的 Unix / Linux 下的程序调试工具。
- GDB :GNU Debugger,是GNU工程为GNU操作系统开发的调试器,但它的使用不局限于GNU操作系统,GDB可以运行在UNIX、Linux甚至Microsoft Windows。
- GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可运行于不同电脑。
- 使用GDB我们可以:–设置断点使程序停住–监视或修改程序中变量的值–跟踪代码执行过程
二、GDB使用
1. 安装gdb:
//终端输入 sudo apt-get install gdb
2.gdb 启动
gcc ac.c -o ac -g
通过上述命令对ac.c编译之后,使用下列命令进入到gdb调试:
3.gdb ac
开始对ac这个可执行文件进行调试
运行程序
r 是run的缩写,会自动运行程序到第一个断点处,若无断点,跑完整个程序
list [位置]
显示指定位置的周围的源代码
位置可由行号、文件名、函数名以及三者之间的组合来定位指定位置;
set listsize 20 # 每次list显示指定区域的20行代码,默认10行
show listsize
list linenumber #显示 linenumber附近的代码
list 50 #显示当前源文件的第50行的附近代码
list:默认10行
例如从第一行显示:
继续执行程序
c 是continue的缩写,会继续执行程序,直到遇到下一个断点
设置断点
b是breakpoint的缩写
b 行号例如b 8可在第八行设置一个断点
b 函数名称例如b main 可以在main函数位置设置一个断点
例如:设置断点查看断点
删除断点
d是Delete breakpoint的缩写
d 编号:例如d 1可删除我设置的第一个断点
单步执行源代码
s和n:两者都会执行下一步的程序源代码
不同的是,若下一步是一个函数,s会进入该函数中,等待你的指令。而n则会直接把这个函数一起执行完毕
单步执行汇编
si和ni跟s和n的功能类似,只不过执行的是汇编指令
显示变量的值
p是print的缩写
p 变量名例如p a会显示出变量a的值,如果查看变量地址使用 p &变量名
退出
q:quit的缩写,也可以使用Ctrl+D
x/4xb &ac
x/:将要查看某个地址所对应的内存
4:将要查看的内存块的个数
x:以十六进制显示(o八进制)
b:每块内存的字节数(b一个字节、h两个字节、w四个字节)