避免bug实用vs调试技巧(2)

159 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情

调试步骤

  • 发现bug 你要知道你的程序有bug
  • 定位 大概知道,bug出现的代码区域位置。
  • 找到bug 经过你的一番查找,然后找出bug把找到!
  • bug 你需要指定一个方案,将出现bug的代码修改。
  • 重新运行 运行更改后的代码,发现是否成功!

学会这5步,让你不在迷行调试。让bug无处躲藏! 在这里插入图片描述

DebugRelease区别

在调试之前不得不介绍一下DebugRelease区别 在这里插入图片描述可以看到我们VS配置管理器下面有两个版本,DebugRelease这两个版本有什么区别呢? Debug

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

Release

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

代码:

#include<errno.h>
#include<stdlib.h>
int main()
{
   //打开文件
   FILE* pf = fopen("data.txt", "w");
   if (NULL == pf)
   {
   	perror("fopen");
   	return -1;
   }
   //读文件,随机读写
   // 
   //关闭文件
   fclose(pf);
   pf = NULL;
   return 0;
}

在这里插入图片描述在这里插入图片描述可以看到一个程序在不同的版本下运行后,生成的程序文件大小不同,Release发布版本明显小于Debug调试版本。 因为Release版本,将代码进行了优化,并且不能调试。 我们的调试都要在Debug版本下才能进行。

Release的优化 博主,你说优化就优化了啊,拿出证据! 上代码:

#include<stdio.h>

int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = i;
	}
	return 0;
}

Debug报错 在这里插入图片描述Release运行成功!

在这里插入图片描述 我们一起分析一下这个代码,这个代码明显有问题,为啥在Release下编译过去了呢? 这是因为Release进行的优化,变量的储存位置也不一样。 这个代码的具体问题会在调试案例中具体讲到! 在这里插入图片描述