一、 什么是bug?
bug 其实在一开始的英文中是小昆虫的意思
在1947年9月9日,葛丽丝·霍普(Grace Hopper)发现了第一个电脑上的bug。有一次Mark II突然宕机,整个团队都搞不清楚为什么电脑不能正常运作了。经过大家的深度挖掘,发现原来是一只飞蛾意外飞入了一台电脑内部而引起了故障(如图所示)。这个团队很快排除错误,并在日志本中记录下了这一事件。也因此,人们逐渐开始用“Bug”(原意为“虫子”)来称呼计算机中的隐错。现在在华盛顿的美国国家历史博物馆中还可以看到这个遗稿。第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。
二、什么是调试?
1. 调试的定义
调试 (英语: Debugging / Debug ),又称除错,是发现和减少计算机程序或电子仪器设备中程序
错误的一个过程。
2. 调试的基本步骤
发现程序错误的存在
以隔离、消除等方式对错误进行定位
确定错误产生的原因
提出纠正错误的解决办法
对程序错误予以改正,重新测试
比如说以下面这段代码为例
明显与我们的预期不符啊
我们便开始调试程序
经过调试窗口我们发现
原来问题出现在这里
ret一开始出现的数字是0
0乘上任何数都是0 最后的sum当然会是0啦
那我们将代码修改如下
奇怪了 1!+2!+3!并不等于十五啊
这说明我们的程序又出现了问题
我们继续开始调试
那经过我们新一轮的debug 我们又发现了 原来啊ret的值再每次循环后没有重置 最终导致了这个错误
那么我们再每次进入循环后将ret的值重置为1
代码如下
这个时候我们可以发现 代码就可以无bug完美运行啦
这就是一个完成的debug过程
3. Debug版本和Release版本
Debug版本就是我们程序员使用的调式版本 它包含调试信息 且不做任何优化 便于程序员调试
Release版本就是一个发布版本 它会对程序做各种优化 使得程序在大小和运行速度上是最优的 以便于用户更好的使用
Debug版本
Release版本
我们可以很明显的发现两个程序的大小都不一样
再看以下代码在Dbug版本
它打印13和hehe之后报错了
Release版本下
它没有报错 打印了13个 hehe
它们之间又什么区别呢?
这就是因为两个版本之间的优化不同所导致的
至于为什么会在debug x86环境下报错
这里大家要首先知道两个知识点
数组随着下标的增长 地址由低到高不断变化
栈区中优先使用高地址进行压栈操作
4. 进入调试环境
5. 记住快捷键
F5 启动调试,经常用来直接跳到下一个断点处。
F9 创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。
这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。
F10 逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。与F11的区别是它不进入函数内部
F11 逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的)
当然还有更多的快捷键使用需要我们熟悉并使用,我推荐看这位博主的文章
6.多多动手,尝试调试,才能有进步
一定要熟练掌握调试技巧。
初学者可能 80% 的时间在写代码, 20% 的时间在调试。但是一个程序员可能 20% 的时间在写
程序,但是 80% 的时间在调试。
我们所讲的都是一些简单的调试。
以后可能会出现很复杂调试场景:多线程程序的调试等。
多多使用快捷键,提升效率。