调试
文章目录
1.什么是bug?
1.1bug概念
程序错误(英语:Bug),是程序设计运行时因程序本身有错误而造成功能不正常、死机、数据丢失、非正常中断等现象。有些程序错误会造成计算机安全隐患,此时叫漏洞。
一些有趣的隐错有时也会成为一种乐趣。在电脑游戏中,假如一些隐错不令游戏出现大错误的话,经常会变成一种玩游戏时的秘技(秘技有时是游戏设计者故意加入,用于检查程序设计,绕过不需要的步骤直接检验需要的地方时所使用的代码)。
例如:穿越火线当年的卡墙(卡到墙里面去),王者荣耀的一些英雄bug(孙策的幽灵船)。
1.2bug的起源
我们发现bug这个英语单词有臭虫,虫子的意思,起始这就是程序bug的最初本意。
1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑bug。有一次Mark II突然宕机,整队团队都搞不清电脑为何不能正常运作。经过大家深度挖掘,发现原来有飞蛾意外飞入一台电脑引起故障(如图所示)。团队很快排除错误,并在日志本记录这事。也因此,人们逐渐开始用“Bug”(原意“虫子”)来称呼计算机隐错。现在在华盛顿美国国家历史博物馆还可以看到这份遗稿。
2.什么是调试,调试的重要性
我们是如何敲的代码?
我们又是如何修改代码bug
拒绝-迷信式调试!!!!
2.1调式的概念
调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。
2.2 调试的基本步骤
-
发现程序错误的存在
-
以隔离、消除等方式对错误进行定位
-
确定错误产生的原因
-
提出纠正错误的解决办法
-
对程序错误予以改正,重新测试
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] = {