vs实用调试技巧

本文详细介绍了编程中遇到bug的处理方法,包括理解bug概念、调试的基本步骤、Debug和Release版本的区别,以及在Windows环境下如何进行代码调试,提供了调试实例和编写易于调试代码的建议。
摘要由CSDN通过智能技术生成

前言:

我们在写程序的时候可能多多少少都会出现一些bug,使我们的程序不能正常运行,所以为了更快更好的找到并修复bug,使这些问题迎刃而解,学习好如何调试代码是每个学习编程的人所必备的技能。

1. 什么是bug?

我们把导致计算机无法正常工作的东西叫做bug

2. 调试的介绍

(以下的代码都是在vs进行调试的)

2.1 调试是什么?

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

2.2 调试的基本步骤

发现程序错误的存在

以隔离、消除等方式对错误进行定位

确定错误产生的原因

提出纠正错误的解决方法

对程序错误给予改正,重新调试

2.3 Debug和Release的介绍

Debug通常被称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序。

Release成为发布版本,它往往是进行了各种优化,是的程序在代码大小和运行速度上都是最优的,以便用户更好的使用。

3.Windows环境调试介绍

3.1 调试环境的准备

在环境中选择Debug选项才能正常调试。(如上图)

3.2 学会快捷键

F5

启动调试,经常用来直接跳到下一个断点处。

F9

创建断点和取消断点

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

F10

逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或是一条语句。

F11

逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部。

CTRL + F5

开始执行不调试,如果你想要程序直接运行起来而不调试就可以直接使用。

F10与F10的区别:在调用函数的时候,F11会进入被调用的函数内,而F10不会。

F10 :

F11

3.3 调试如何查看当前的信息

 当调试开始的时候可以按照下图的步骤来查看我们想要查看的信息。

3.3.1 查看临时变量的值 

要想查看临时变量的值我们可以按照上图的方法开启监视窗口,然后在监视窗口输入我们想要观察的临时变量。

查看形参的值:

仅仅输入形参的名字,只会显示形参的第一个值。(如下图)

 而要想查看临时变量的多个值就需要用到“临时变量名+,+想要查看的值的数量”的输入方式进行查看。

例如,查看临时变量的前10个值就可以这样输入:a,10(如下图) 

3.3.2 查看内存信息

打开内存窗口后我们可以看到下图的界面。

3.3.3  查看调用堆栈

调佣堆栈反映了函数调用的逻辑

3.3.4 查看反汇编信息

反汇编可以将我们的c语言代码翻译为汇编代码

4.一些调试的实例

4.1 示例一

实现代码:求1!+2!+3!+...+ n!;不考虑溢出。

错误代码:

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = 1;
	int sum = 0;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= i; j++)
		{
			ret *= j;
		}
		sum += ret;
	}
	printf("%d", sum);
	return 0;
}

发现错误: 

 

当输入3时正确的结果应改为9但是这里显示的是15。

查找错误原因:

打开监视窗口查看这里临时变量的值

我们可以看到当执行一次for循环这里显示的值是没有任何问题的。

因为ret在这里的预期作用是求i的阶乘,当执行完第三次for循环时,这里i值为3所以ret的预期值为6,但是监视这里显示的值为12,这与所得的结果有所差异,所以这里的错误就应该在ret的上。 

解决问题:
对代码分析后发现当执行完一次for循环后ret的值并没有重新赋值为1,而是带着上一次for循环得到的值直接进行了下一次for循环的乘积。所以正确的代码应该为:

int main()
{
	int n = 0;
	scanf("%d", &n);
	//int ret = 1;
	int sum = 0;
	for (int i = 1; i <= n; i++)
	{
        int ret = 1;
		for (int j = 1; j <= i; j++)
		{
			ret *= j;
		}
		sum += ret;
	}
	printf("%d", sum);
	return 0;
}

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

5.1 优秀的代码:

1.代码运行正常

2.bug很少

3.效率高

4.可读性高(你看得懂,别人也看得懂)

5.可维护性高

6.注释清晰

7.文档齐全

常见的coding技巧:

1.使用assert

2.尽量使用const

3.养成良好的编码风格

4.添加必要的注释

5.避免编码陷阱(编码陷阱是指在编程中,由于程序员的疏忽或者不熟悉某些编码规范而导致的错误。)

  • 49
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Code Warrior

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

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

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

打赏作者

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

抵扣说明:

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

余额充值