28-Linux调试错误

调试需要用到的常用命令:

调试的工具是gdb,编译时加-g(从Release文件转成Debug文件),增加调试信息

转成Debug的代码为: gcc -c main main.c -g(一定要加-g,不然转不成Debug文件)

gdb main

l //显示代码

b + n //在第n行加断点

r(run)//运行

n(next)//单步行

p(printf) buff //打印buff

q(quit)//退出调试

s//进入函数

finsh//跳出函数

info break//查看断点位置

c//从一个断点到另一个断点.

例子(不断的从键盘输入并打印输入的内容,直到输入end结束程序):

#include <stdio.h>
#include <string.h>

int main()
{
	while(1)
	{
		char buff[128] = {0};
		printf("input\n");
		fgets(buff,128,stdin);

		if(strcmp(buff,"end")==0)
		{
			 break;
        }
        printf("read:%s\n",buff);
 	}
    return 0;
  }

本来输入end应该结束,然而此时并没有结束,所以我们开始调试程序,查看哪里出了问题,Ctrl+C终止程序

在这里插入图片描述

必须先转成Debug文件(后面的-g必须加), gdb main 不能写成 gdb main.c 这样是错误的

在这里插入图片描述

l是显示代码

在这里插入图片描述

在第6行加了一个断点,然后运行程序,输入end后发现并没有终止,然后每次n往下一步执行

在这里插入图片描述

然后通过输出buff保存的end值发现,保存进去的是end\n,所以需要修改main程序

在这里插入图片描述

退出调试(q)

在这里插入图片描述

将strcmp函数修改为strncmp函数(本次只追求调试结果对,不追求代码的完整性,可执行性)

在这里插入图片描述

修改完以后,重新编译main.c文件,然后执行main(./main)文件,结果正常结束程序

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值