编译程序
在进行程序编译时添加 -g 选项
例:
gcc -g -Wall -o test -test.c
断点
-
list 查看代码
list可简写为 l
使用方法:- list [文件名]:[行号]
- list [函数名]
命令执行后,会显示行号附近的代码
-
break 设置断点
break可简写为 b
使用方法:- break [文件名] :[行号]
- break [行号]
- break if 条件
比如有时我们在循环处需要循环多少次后停下就用第三条命令,
break if i==4这条命令执行后,当循环到第5次,满足条件i == 4时程序停住。for(i = 0;i < 10; ++i) { a++; }
在设置断点后可通过continue命令继续运行程序,程序会在所设断点处停住,contiune可简写为 c。
这里需要注意的是在使用第2种方法时, 会将断点设置在目前所在的文件里,例如现在有1.c和2.c两个文件,上一条命令是操作2.c文件,那么本次的断点会默认设置在2.c文件里。
-
info 查看断点
使用方法:- info b 或者 info break
执行命令后会显示所有的断点号和各个断点所在的行号
- info b 或者 info break
-
delete 删除断点
使用方法:- delete [断点号]
断点号可以是单个断点号,也可以是序列。例如 delete 1-10,这将删除序号在区间1~10内的所有断点。
- delete [断点号]
-
next 和 step
这两条命令用来单步调试程序,- next :程序向后执行一步,若为子函数则不进入子函数内部;
- step :程序向后执行一步,若目前程序指针指向子函数则进入子函数;
-
print
当程序运行起来后遇到故障或者断点停住,或者单步调试时,可通过print命令来查看变量的值。int fun(void) { int i, a = 1, b = 2, c = 3; int array[10] = {0}; a++; b++; c++; for(i = 0;i < 10; ++i) { array[i] = i; } return 0; }
使用方法:
print b可以查看变量b的值。**print array[3]**便可以查看数组第四个元素的值。
在断点这一部分中还有很多其他命令,比如设置观察点等等,我目前也在学习。平常调试这些基本够用了。