目录
前言
小伙伴们,大家好!大家对于游戏的热爱不知道高不高,但是你如果玩游戏的话,那一定对于bug这个词并不陌生,那bug的由来和对于bug的修改又应该如何呢?进入C语言的世界里面,大家就会发现会花费大把大把的时间在调试和修改代码上,下面我们就进入Microsoft visual studio 2022里面很多实用的调试小技巧。
一. 什么是bug?
我们要修改程序的bug,我们就要对于bug有了解,那我们就先谈谈bug的由来,bug的中文意思是臭虫,那小伙伴们好不好奇为什么bug要取名为bug呢?
Bug一词的原意是“臭虫”或“虫子”,现在通常被用来表示隐藏在计算机系统中的一些未被发现的缺陷或问题。
据记载,1945年9月9日,编译器发明者格蕾斯·哈珀中尉带领她的小组构造”马克二型”计算机。突然,马克二型死机了。技术人员试了很多办法,最后错误定位在第70号继电器上,发现上面有一只被电死的飞蛾。哈珀中尉将蛾子夹出来,用透明胶布贴到事件记事本中,并注明”第一个发现虫子的实例”。从此,人们把计算机错误戏称为Bug,而将发现Bug并纠正的过程称为”Debug”。是不是咱们程序员也是相当的风趣幽默。
二. 什么是调试?
2.1 什么是调试?
2.2 调试的步骤
当我们写好一个程序的时候,我们有需要如何去调试呢?那调试又有哪写步骤呢?
1. 运行程序,并发现程序的bug
2. 发现bug,并且逐步运行并隔离,确定bug出现的准确位置
3. 找到bug之后,发现问题出现原因,并想方法解决
4. 应用方法解决bug之后,并重新调试直至无bug为止
2.3 Debug和Release版本的区别
大家使用VS这么久了,不知道大家有没有注意到这个Debug版本和Release版本的存在。
Debug 通常称为调试版本 ,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本 ,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,以便用户很好地使用。
总结而言,Debug版本是给我们程序员来找bug的,而Release版本就是用来测试的,站在用户的角度,最大程度的方便用户的使用。
当我们采用不同版本的运行时,就会在文件夹里出现不同版本的文件夹。
三. Windows环境调试的介绍
3.1 代码调试的前提
大家一定要注意在调试的时候一定需要是Debug版本,Release版本是不能进行调试的。
3.2 学会快捷键的使用
常用的快捷键:
启动调试,经常用来直接跳到下一个断点处。
创建断点和取消断点断点 的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。
逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑 进入函数内部 (这是最常用的)。
开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。
3.3 对于基本调试的使用
查看变量的值对于我们而言是非常重要的:
这个我们使用是非常多的。
查看当前内存信息:
其中这个地方可以更改内存的列数,一般我们选择4列,这样子我们可以看的最清楚(如下图)。
还有调用堆栈:
还有我们的汇编信息:
1. 右键鼠标找到反汇编。
2. 窗口中寻找反汇编。
还有我们的寄存器:
这些都是我们程序员在调试中非常常见的调试技巧。
四. 如何提升自己的调试技巧
想知道如何快速提升你的调试技巧吗?
往下看...
...
...
...
...
...
...
...
...
其实把根本没有速成的进步方法,小编最开始连如何调试都不知道,到如今可以自己找到代码中简单的bug了,小编对于调试技巧的建议只能是勤能补拙,只用自己多多尝试才可以学会如何修改bug。
五. 调试举例
对于调试技巧,我们需要多多练习才能体会到其真谛,我们不难光说不练,纸上谈兵,下面我们就来实战一下:
要求:求阶乘的大小
#include <stdio.h> int main() { int n=0; scanf("%d", &n); int sum = 0; for (int i = 1; i <= n; i++) { sum *= i; } printf("%d", sum); return 0; }
我们发现答案并不是我们想要的120,而是0,我们就需要进行调试来发现到底哪里出现了问题呢?
这个时候我们经过调试发现无论i为何值都是0,那就是sum初始化有问题了,不应该是0,0乘任何数都是0,这个时候我们修改int sum=1就可以了,如下:
#include <stdio.h> int main() { int n=0; scanf("%d", &n); int sum = 1; for (int i = 1; i <= n; i++) { sum *= i; } printf("%d", sum); return 0; }
这个时候我们发现答案就是正确的。
虽然这是一个很简单很简单的错误,不过我们对于调试就是应该一步一个脚印,慢慢的进步。
六. 编程常见的错误
6.1 编译型错误
直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。
看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是 标识符名不 存在 或者 拼写错误 。
借助调试,逐步定位问题。最难搞。
尾声
对于新手程序员来说,20%时间在调试,80%时间在写代码,而对于大佬来说就是截然相反,只有20%的时间在敲代码,80%的时间在调试,有的时候一个程序员一整天都在调试修改,由此可见对于我们程序员来说调试是多么的重要,希望大家看完可以自己多去尝试调试代码,那么这期的分享就到此结束了,咱们下期再见,拜拜,小伙伴们!