一个合格的程序员也是一名合格的侦探---Debug篇

调试

 

在这里插入图片描述

1.什么是bug?

 

1.1bug概念

  程序错误(英语:Bug),是程序设计运行时因程序本身有错误而造成功能不正常、死机、数据丢失、非正常中断等现象。有些程序错误会造成计算机安全隐患,此时叫漏洞

  一些有趣的隐错有时也会成为一种乐趣。在电脑游戏中,假如一些隐错不令游戏出现大错误的话,经常会变成一种玩游戏时的秘技(秘技有时是游戏设计者故意加入,用于检查程序设计,绕过不需要的步骤直接检验需要的地方时所使用的代码)。

  例如:穿越火线当年的卡墙(卡到墙里面去),王者荣耀的一些英雄bug(孙策的幽灵船)。

 

1.2bug的起源

在这里插入图片描述

我们发现bug这个英语单词有臭虫,虫子的意思,起始这就是程序bug的最初本意。

1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑bug。有一次Mark II突然宕机,整队团队都搞不清电脑为何不能正常运作。经过大家深度挖掘,发现原来有飞蛾意外飞入一台电脑引起故障(如图所示)。团队很快排除错误,并在日志本记录这事。也因此,人们逐渐开始用“Bug”(原意“虫子”)来称呼计算机隐错。现在在华盛顿美国国家历史博物馆还可以看到这份遗稿。

img

 

2.什么是调试,调试的重要性

我们是如何敲的代码?

在这里插入图片描述

 

我们又是如何修改代码bug

img

 

img

拒绝-迷信式调试!!!!

 

2.1调式的概念

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

 

2.2 调试的基本步骤

img
  • 发现程序错误的存在

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

  • 确定错误产生的原因

  • 提出纠正错误的解决办法

  • 对程序错误予以改正,重新测试

 

2.3Debug版本和Release版本

在咱们写代码时,程序有Debug和Release两个版本。

在这里插入图片描述

 

在当前项目路径下也可发现debug和Release两个文件夹。

提示:如果没有Release这个文件夹,可以将程序改成Release版本,按F7编译一下即可生成。

在这里插入图片描述

 

 

2.3.1Debug版本

Debug版本又称为调试版本,是程序员写代码和调试代码的版本,我们在上述图片中发现Debug文件夹要大,因为其中放着调试信息

 

2.3.2Release版本

Release版本又称为发布版本,是测试人员测试程序的版本,也是用户使用的版本。往往会对程序进行一些优化,使其性能最大化达到良好的体验效果。Release版本下无调式信息,无法进行调试。

 

2.3.3区别

Debug和Release反汇编展示对比:

代码:

#include<stdio.h>
#include<assert.h>

int my_strlen(const char* str)//不会改变str的内容,加上const
{
   
	assert(str != NULL);//不能为空
	const char* begin = str;

	while (*(str++) != '\0')
		;
	return str - begin - 1;
}

int main()
{
   
	const char* str = "hello world";
	int len = my_strlen(str);
	printf("%d\n", len);
	return 0;
}

 

Debug下的反汇编:

在这里插入图片描述

 

Release下反汇编:

在这里插入图片描述

 

2.3.4同一代码在Debug和Release下的差别

环境:visual stdio

#include <stdio.h>

int main()
{
   
    int i = 0;
    int arr[10] = {
   
  • 65
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 48
    评论
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值