1. 什么是Bug
Bug的本意是虫子,但是在计算机领域中指的是计算机程序中出现错误。
Bug一词的由来是一个很有意思的小故事:
1945年9月9日,下午三点,哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。二战还没有结束,哈珀的小组日以继夜地工作,机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。
突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”
从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)
2.什么是调试(debug)
调试就是把错误bug消灭的操作,当然当程序出现bug时我们要狠心的承认自己的编写的程序是不完美的,然后潜下心来找到问题所在,将它完善。
3. debug 和 release
debug(调试版本)编译出来的可执行程序是可以调试的,debug版本编译出来的可执行程序是不做任何优化的。
release(发布版本)直接交付给用户的版本,release版本编译出来的可执行程序在代码大小和运行速度上都是最优的。
可以看出,debug版本的可执行文件和release版本的差距还是蛮大的,这就是因为debug版本中还有比release多包含了调试的一些信息还有就是优化方面的东西。
4. VS调试快捷键
F9 创建断点和取消断点
断点就是程序在执行的到断点的时候暂停
F5 启动调试
直接跳到下一个断点处,用来在调试的时候跳过那些已经确定没有问题的程序用
F10 逐过程
用来处理一个过程,可以是一个语句也可以是一个函数
F11 逐语句
一个语句一个语句的处理,不会跳过函数
CTRL+F5 开始执行不调试
F9+F5调试实例:
我希望这个代码运行到 i==5 时暂停,所以要在循环中打上一个断点,单击41行再按F9前面出现一个红点,说明断点已经打上了,再右击红点选择条件
在对应的位置输入断点出现的条件,然后F5执行一下看看
F5直接跳到下一个断点处,这样就在 i==5 时在这个点断开了,下一步就是打印 5 了
5. 监视和内存观察
监视和内存的观察都要在调试过程中执行
这样一段代码,我还是将断点打在了 i==5 的位置,下面F5直接跳到断点位置,观察arr数组,num 和 ch
按以上步骤找到监视,监视窗口任意选一个就行,都是一样的
出现监视窗口后我们输入需要观察的对象,就可以看到它们的内容了,数组后半程因为没有定义,所以是以随机数状态存在的,看起来是一堆乱码。
再按以上步骤找到内存窗口
在地址栏中输入地址敲回车,可以看到在内存中的状态
我们以字符变量ch为例讲解一下,内存中窗口中这3个模块都是什么含义
第一个模块是变量内存红的地址,这个很好理解
第二个模块是变量在内存中的存储内容,但是是以16进制的形式表示出来了,我们不要搞混淆,任何数据在内存中的存储都是以2进制存在的。1个十六进制位对应4个二进制位,2个十六进制位就对应了一个字节,这一点我们可以用计算器验证。
第三个模块表示这个地址下可能存储的文本,完全可以忽略掉第三给模块,没有什么意义的。
二维数组查看方式于一维数组不同,要写成 arr,行数