准备操作:
假设以下操作被调试的程序内容如下:
文件名为: main.c
#include <stdio.h>
int main()
{
int i = 0;
for(i=0; i<3; i++)
{
printf("%d\n", i);
}
return 0;
}
编译:
gcc -g main.c
为了方便gdb调试,我们需要加上-g选项,默认生成的调试文件为 a.out ;
从下图我们可以看到编译gcc -g 编译之后的文件中多了一个 a.out 绿色表示可执行;
启动被调试程序:
gdb ./a.out
或
gdb a.out
下图为 启动并运行(r) 之后的效果:
其中 r 表示 run, 就是运行的意思,使用 r 之后,如果中间没有设置断点或遇到错误就会一直执行完毕。
常用的几个命令
下面的命令举例,均以上面的代码为例,分别在第3行和第5行代码位置处设置断点。
b
break 设置断点
格式:b 函数名 或 行号
delete 行号
删除一个断点或监测点info b
info break 查看当前已经设置的断点list
查看源码,并每行对应的行号man gdb
查看 gdb 常用命令语法n
next 单步调试p 变量名
print 打印变量的值r
run 运行s
step 进入子函数set logging on
打开日志模式;
记录当前的gdb输出到当前目录的文件gdb.txt中;start
开始执行程序,在main函数前停下来。watch * 变量地址
watch 变量
设置需要观察的变量前后值的变化情况;
info watchpoints
开启查看已设置过的变量,目前来看不使用该句也可以查看。
注意:只有当调试的过程中,遇到其变化时才会显示出来。quit
退出
常用参数:
- -p 进程ID号
调试正在运行的程序;