0基础适合入门调试技巧方法大全

目录

1.什么是bug(软件缺陷)?

2.调试

2.1 调试是什么?

2.2 调试的基本步骤

2.3 Debug和Release的介绍。

3.环境调试

3.1调试环境的准备

3.2 学会快捷键

3.3 调试的时候查看程序当前信息

4.多多动手,尝试调试,才能有进步。

5.如何写出好(易于调试)的代码。

5.1 优秀的代码:

6.例子1:自己写一个strcpy函数(感受什么是好的代码)

7.例子2 const在修饰指针变量时的介绍

8. 编程常见的错误

8.1 编译型错误

8.2 链接型错误

8.3 运行时错误

9.总结


所谓调试就是改bug,改错误。

1.什么是bug(软件缺陷)?

  • 产品说明书中规定要做的事情,而软件没有实现。
  • 产品说明书中规定不要做的事情,而软件确实现了。
  • 产品说明书中没有提到过的事情,而软件确实现了。
  • 产品说明书中没有提到但是必须要做的事情,软件确没有实现。
  • 软件很难理解,很难使用,速度超慢,测试人员站在最终用户的角度看到的问题是平常的但不是正确的。

2.调试

2.1 调试是什么?

调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。

2.2 调试的基本步骤

  1. 发现程序错误的存在
  2. 以隔离、消除等方式对错误进行定位
  3. 确定错误产生的原因
  4. 提出纠正错误的解决办法
  5. 对程序错误予以改正,重新测试

2.3 Debug和Release的介绍。

  1. Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
  2. Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

因为release进行优化后,所以所占内存比debug少。

并且程序员在调试代码时在debug版本上进行调试,而release版本不可以进行调试。


​int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}
	return 0;
}

在上述代码中在vs2022中debug版呈现死循环。我们不知道死循环的原因就可以通过调试来判断。

在进行了12次循环,发现arr[12]和i同时变为了0;这时想为什们,是不是地址相同,改arr[12]的时候把i也改掉了。在进行判断,结果发现地址相同。

其原因是i,arr,都是局部变量都存放在栈区中,而栈区在内存中存放是先进后出,先用高地址再用低地址,而数组随着下标的增大地址由低到高增大。而在vs编译器中在局部变量正好差2个整型。因此&arr[12]=&i;改变了arr[12]就改变了i=0;就死循环了。

但是如果在release版中他会自动进行优化,打印12次后就会停下来。

3.环境调试

3.1调试环境的准备

在环境中选择 debug选项,才能使代码正常调试.

3.2 学会快捷键

最常使用的几个快捷键:

  • F5        启动调试,经常用来直接跳到下一个断点处。
  • F9       创建断点和取消断点

断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

  • F10      逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
  • F11       逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的)。
  • CTRL + F5  开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

3.3 调试的时候查看程序当前信息

只有在开始调试的时候才可以查看信息打开监视内存等一系列东西。 可以自己多尝试几遍就熟悉了。

4.多多动手,尝试调试,才能有进步。

一定要熟练掌握调试技巧。
初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写
程序,但是80%的时间在调试。
我们所讲的都是一些简单的调试。
以后可能会出现很复杂调试场景:多线程程序的调试等。
多多使用快捷键,提升效率。

5.如何写出好(易于调试)的代码。

5.1 优秀的代码:

优秀代码的标志

1. 代码运行正常
2. bug很少
3. 效率高
4. 可读性高
5. 可维护性高
6. 注释清晰
7. 文档齐全

常见的coding技巧:
1. 使用assert
2. 尽量使用const
3. 养成良好的编码风格
4. 添加必要的注释
5. 避免编码的陷阱。

6.例子1:自己写一个strcpy函数(感受什么是好的代码)

想要自己学习可以在cplusplus.com网站查找相关信息下列信息来源与该网站

strcpy功能: 拷贝字符串(下面是功能描述)

通过了解strcpy的一步步改进,了解什么是优质代码,在遇到任何问题都不会出错的代码,不会有漏洞

虽然上述代码可以完成任务,但是太过繁琐,可以让循环再简单一点

但是不严谨,如果arr1和arr2是空指针,程序错误但是却不报错,如果不调试很难发现。加一个assert断言函数,如果为假就报错。

 但是在库函数strcpy的第二个变量是const char*,让其值不可修改,并且其返回值是char*,就可以进行链式访问。

7.例子2 const在修饰指针变量时的介绍

可以自己在cpluspluse.com网站上自己了解就不过多赘述了

const:放在指针变量的*左边时,修饰的是*p,*p不能修改,但指针变量p可修改。

*p = 0;//err

p = &ret;//ok

const:放在指针变量的*右边时,修饰的是指针变量p,指针变量p不能修改,但*p可修改。

p = &ret;//err

*p = 0;//ok

8. 编程常见的错误

8.1 编译型错误

直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。

8.2 链接型错误

看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不存在或者拼写错误。

8.3 运行时错误

借助调试,逐步定位问题。最难搞

9.总结

在调试过程中,第一次可能不太熟练,可是调试是程序员的必备技能,等以后难得就不是写代码了而是调试,一次次调试,多用快捷键,熟能生巧,让我们的代码都没有bug,一起加油!!!

如果觉得写的不错希望一键三连,是对我最大的帮助谢谢!!!!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桐桐超努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值