调试的基本操作(VS2019)

目录

一、什么是bug

二、什么是调试(debug)

三、vs2019的两种编程环境

四、调试常用快捷键

五、监视和内存观察

监视窗口:

内存窗口:

六、调试举例

七、编程常见错误归类

1.编译型错误

2.链接型错误

3.运行时错误

前言:作为程序员,写bug那简直是家常便饭,轻则几个重则几十个,你还在人脑查bug吗?学习调试,恐怕能给你带来不少的帮助以及对代码运行的理解。

一、什么是bug

        我们常说bug,那么bug又是什么呢?bug本意是“昆虫”或“虫”,现在一般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或问题,简称程序漏洞。

        “Bug”的创始人格蕾丝·赫柏(Grace Murray Hopper),她是一位为美国海军工作的电脑专家,1947年9月9日,格蕾丝·赫柏对Harvard MarkII设置好17000个继电器进行编程后,技术⼈员正在进行整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部⼀组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶条贴上飞蛾,并把“bug”来表示“⼀个在电脑程序里的错误”,“Bug”这个说法⼀直沿用到今天。(引自:程序错误_百度百科 (baidu.com)

二、什么是调试(debug)

        当我们发现程序中存在的问题的时候,那下一步就是找到问题,并修复问题。这个找问题的过程叫称为调试,英文叫debug(消灭bug)的意思

        在进行调试的时候,我们要做好这样的觉悟,就是承认自己的代码存在问题。如此,我们才能心平气和的去修复问题,否则只会越改越气急败坏,特别是人脑查bug,这是对内心的一大考验,解决问题之前一定要承认问题的存在


三、vs2019的两种编程环境

      “ Debug”通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序;程序员在写代码的时候,需要经常性的调试代码,就将这里设置为 debug ,这样编译产生的是debug 版本的可执行程序,其中包含调试信息,是可以直接调试的。
        “Release”称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。当程序员写完代码,测试再对程序进行测试,直到程序的质量符合交付给用户使用的标准,这个时候就会设置为 release ,编译产生的就是 release 版本的可执行程序,这个版本是用户使用的,无需包含调试信息等。

对比可以看到从同一段代码,编译生成的可执行文件的大小,release版本明显要小,而debug版本明显大

我们想要进行调试,当然应该在debug环境下进行。

四、调试常用快捷键

F9:创建断点和取消断点。断点的作用是可以在程序的任意位置设置断点,打上断点就可以使得程序执行到想要的位置暂定执行,接下来我们就可以使用F10,F11这些快捷键,观察代码的执行细节。


F5:启动调试,经常用来直接跳到下一个断点处,一般是和F9配合使用。(若不打上断点,程序就不会停下知道运行结束或出错终止


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


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

在函数调用的地方,想进入函数观察细节,必须使用F11,如果使用F10,直接完成函数调用。
CTRL+F5:开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。
        VS更多快捷键了解见此博客:VS中常用的快捷键_vs快捷键-CSDN博客

五、监视和内存观察

        我们已经知道如何通过调试快捷键来进行调试进程了,那么我们该如何观察程序中的变量以及程序对于内存空间的使用呢?

这里我们将使用监视窗口内存窗口来进行观察(一定是在调试状态下才能进行观察):

监视窗口:

内存窗口:

六、调试举例

#include <stdio.h>

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

运行结果:

10阶乘求和得到数值还是比较大的,难以判断是否正确,我们可以稍加修改

//n阶乘求和

#include <stdio.h>

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

运行结果:

我们知道3的阶乘求和为9,很明显代码出现了问题,接下来我们进行调试:

打上断点,直接来到循环部分,因为变量的初始化一般没有什么问题。接着打开监视窗口,观察关键变量的值的变化。

通过分析,发现,原来在每次计算阶乘时,要给ret初始化,而这里没有造成了错误。则将代码改为:

//n阶乘求和

#include <stdio.h>

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

运行结果:

到此,bug就得到解决了。

调试是有很多方法和技巧的,每个人的方法技巧都不同,要自己慢慢体会和总结,但是调试基本操作是一样的,需要我们掌握。

七、编程常见错误归类

1.编译型错误

编译型错误⼀般都是语法错误,这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的,双击错误信息也能初步的跳转到代码错误的地⽅或者附近。编译错误,随着语言的熟练掌握,会越来越少,也容易解决。其报错体现在:

2.链接型错误

⼀般是因为:标识符名不存在;拼写错误;头文件没包含;引用的库不存在

3.运行时错误

运行时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运行时问题。通常因为逻辑原因或者数据调用不合理造成

  • 37
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: "vs2019 debug assertion failed" 的意思是 "VS2019 调试断言失败"。这通常是由于程序中的某个条件不满足而导致的错误。在调试时,VS2019会检测到这个错误并显示这个断言失败的消息。要解决这个问题,需要检查代码中的条件语句,确保它们都能够正确地执行。如果无法解决问题,可以尝试使用其他调试工具来定位问题。 <br>### 回答2: VS2019 debug assertion failed指的是Visual Studio 2019在调试程序时遇到错误的一种表现形式。 在运行程序时,如果出现了断言失败的错误提示,通常会弹出一个对话框,里面会有错误信息以及代码的位置信息。这是因为在Debug模式下,Visual Studio会对代码进行详细的检查,并在出现问题时弹出错误提示进行调试。 断言失败通常是由于程序中的一些错误或者不符合预期的情况出现导致的。这种错误通常是由于变量的值或者程序的状态不符合预期,导致逻辑出错,最终导致程序崩溃或者表现异常。 解决VS2019 debug assertion failed的问题需要深入分析程序的代码和数据,找出问题所在,并进行修复。通常可以通过在程序中加入调试信息,打印出变量的值或者跟踪程序的状态,来找出异常情况的原因。 在开发过程中,可以通过加入更多的断言来提前发现问题,从而减少错误的出现,增加程序的可靠性。 总的来说,VS2019 debug assertion failed是一种常见的调试错误,需要通过分析程序的代码和数据来找出原因,从而进行修复。在开发过程中,需要加强对程序中可能存在的异常情况的预判和处理,从而减少错误发生的可能性。 <br>### 回答3: VS2019是微软公司的一款集成开发环境,可以用于开发各种应用程序,包括桌面程序、Web应用程序、移动应用程序等。在使用VS2019进行开发时,有时会出现“debug assertion failed”这个错误提示,这时需要根据实际情况进行排查和解决。 1.错误原因 在使用VS2019进行编程时,出现“debug assertion failed”的原因有很多,可能是程序出现了内存泄漏、数组越界、指针错误等问题,也可能是调用了未初始化的变量或没有对变量进行初始化等问题。此外,还可能是由于程序中使用的函数或库文件版本不一致,或者是编写的代码有误等原因导致的。 2.解决方法 针对不同的错误原因,可以采取不同的解决方法,下面列举几种常见的解决方法。 (1)检查内存泄漏问题:可以使用内存泄漏检测工具来检测程序是否存在内存泄漏问题,如果存在就及时释放内存,避免出现“debug assertion failed”的错误提示。 (2)检查数组越界和指针错误:程序中使用的数组和指针一定要注意边界和初始化,避免出现越界和指针错误,这也是常见的导致“debug assertion failed”的原因之一。 (3)检查变量的初始化问题:使用变量前一定要对其进行初始化,避免出现调用未初始化变量的情况,这也是常见的导致“debug assertion failed”的原因之一。 (4)检查程序调用的函数和库文件版本是否一致:如果程序中调用了函数或库文件,一定要检查其版本是否一致,否则也容易出现“debug assertion failed”的错误提示。 (5)调试程序:在遇到“debug assertion failed”的错误时,可以使用VS2019自带的调试器来进行调试,查看程序中具体出了什么问题,这样可以更快地找到解决办法。 总之,在编写程序时一定要注意细节,避免出现常见的错误,同时也要学会使用VS2019自带的调试工具进行排查和解决问题。只有这样,才能更好地提高编程效率和程序质量。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值