调试需要用到的常用命令:
调试的工具是gdb,编译时加-g(从Release文件转成Debug文件),增加调试信息
转成Debug的代码为: gcc -c main main.c -g(一定要加-g,不然转不成Debug文件)
gdb test
l //显示代码
b + n //在第n行加断点
r(run)//运行
n(next)//单步行
p(printf) buff //打印buff
q(quit)//退出调试
s//进入函数
finsh//跳出函数
info break//查看断点位置
c//从一个断点到另一个断点.
例子(不断的从键盘输入并打印输入的内容,直到输入end结束程序):
#include
#include
int main()
{
while(1)
{
char buff[128] = {0};
printf("inputn");
fgets(buff,128,stdin);
if(strcmp(buff,"end")==0)
{
break;
}
printf("read:%sn",buff);
}
return 0;
}
本来输入end应该结束,然而此时并没有结束,所以我们开始调试程序,查看哪里出了问题,Ctrl+C终止程序
必须先转成Debug文件(后面的-g必须加), gdb main 不能写成 gdb main.c 这样是错误的
l是显示代码
在第6行加了一个断电,然后运行程序,输入end后发现并没有终止,然后每次n往下一步执行
然后通过输出buff保存的end值发现,保存进去的是endn,所以需要修改main程序
退出调试(q)
将strcmp函数修改为strncmp函数(本次只追求调试结果对,不追求代码的完整性,可执行性)
修改完以后,重新编译main.c文件,然后执行main(./main)文件,结果正常结束程序