gcc -g main.c //-g在目标文件加入源代码的信息
(gdb) start //开始调试
(gdb) n //一条一条执行,即步过调试
(gdb) step/s //执行下一条,如果函数进入函数,即步进调试
(gdb) backtrace/bt //查看函数调用栈帧
(gdb) frame/f //选择栈帧,再查看局部变量
(gdb) print/p //打印变量的值
(gdb) p *array@len //打印指针array指向地址的len长度的内容
(gdb) print *(int*)p@10 //以int格式打印指针p指向地址中10长度的值
(gdb) finish //运行到当前函数返回
(gdb) set var sum=0 //修改变量值
(gdb) list/l 行号或函数名 //列出源码
(gdb) display/undisplay sum //每次停下显示变量的值/取消跟踪
(gdb) break/b 行号或函数名 //设置断点(如果是地址的话前面加符号 * )
(gdb) continue/c //连续运行
(gdb) delete breakpoints 2 //删除某个断点
(gdb) disable/enable breakpoints 3 //禁用/启用某个断点
(gdb) break 9 if sum != 0 //满足条件才激活断点
(gdb) run/r //重新从程序开头连续执行
(gdb) watch input[4] //设置观察点
(gdb) x/7b input //打印存储器内容,b--每个字节一组,7--7组
(gdb) disassemble //反汇编当前函数或指定函数
(gdb) si // 一条指令一条指令调试 而 s 是一行一行代码
【examine】
x/[number][format] <addr>
其中number,format和u都是可选参数,addr为查看变量的内存地址
number: 一个正整数,表示从当前地址向后显示几个地址的内容。如
x/24 0x400c90
表示查看0x400c90到向后0x400c90+24的内容
format:显示的格式不是查看的格式。和c语言中的格式缩写一样,如
d:整数integer
s:字符串string
c:字符char
u:无符号整数 unsigned integer
o:八进制格式显示变量
x:十六进制格式
f: 浮点数格式float
......
x/24d 0x400c90
显示0x400c90到0x400c90+24的内容,显示的格式为整数d,这个命令常用于检查输出数组的内容
(gdb) x/20 $esp //查看内存中开始的20个数
【info】
(gdb) info/i breakpoints //查看已经设置的断点
![d3b1ace2fd68b4a7afc32acd49e3d172.png](https://i-blog.csdnimg.cn/blog_migrate/15d212e7810011074a9cb09e5e3dd606.png)
原文:GDB最常用的命令 - 胡小兔 - 博客园