调试准备
1、简单的累加
1 #include
2
3 int main (void)4 {5 int count = 0;6 inti;7 for ( i = 0; i < 10; i++){8 count +=i;9 }10 printf("count = %d \n", count);11 return 0;12 }
2、makefile
1 cc =gcc2 target =main3 obj =add.o4 $(target):$(obj)5 $(cc) -g $(obj) -Wall -o $(target) -lpthread -lrt6 add.o : add.c7 $(cc) -c add.c -g -lpthread8 .PHONY:clean9 $(RM) *.o $(target)
注意:Makefile中只能出现tab开头,不能是四个空格,GDB调试编译必须带 -g 。
3、编译过程
调试过程
1、进入gdb调试
gdb 编译生成的可执行文件
2、查看代码
list或者l(l 等价于 list)
直接回车表示执行上一条命令
3、设置断点
a.直接根据函数名设置断点
如break main或b mian (b 等价于 break)
b.根据行数设置断点
如b 8
c.根据文件名和行数设置断点
如 break add.c:8 在add.c中第8行设置断点
查看断点 info breakpoint 或 i b(i 等价于info)
4、开始
开始执行
start命令
一步步执行:
next或n(n等价于next)
后可直接回车
打印参数值
print count
前面表示打印次数
p/[] 变量
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
查看内存
查看变量地址和值
查看内存
x/
查看机器码
display/i $pc
$pc是GDB的环境变量,表示着指令的地址,/i则表示输出格式为机器指令码。