目录
1.为什么要进行调试?
2.调试的基本步骤
3.关于Debug版本和Release版本
4.调试技巧
5.调试总结
我还是喜欢真实的世界,因为在那里,我可以通过自己的努力来改变残酷的现实
本专栏适用于有一定C语言基础并且还要继续学习的人
往期回顾:
代码调试技巧
C语言函数详解
C语言操作符详解
C语言实现扫雷及进阶
C语言实现三子棋
C语言实现猜数字游戏
C语言for循环详解
C语言初学可能会遇到的问题(一)
文章质量在努力提高中...
本文将介绍编写程序过程中最重要的一环,调试代码。刚开始,我们可能会花80%时间写代码,20%时间调试代码;但一个程序员可能20%的时间在写代码,80%时间都在调试代码,熟练掌握代码调试技巧是编程水平进步的重要基石。
一般在进行软件开发的时候,会先根据用户的需求建立项目,然后需求收集、需求分析、设计、开发、测试、验收、发布、上线这几个过程。当软件设计步骤完成后,程序员就要进行开发,在开发过程中,写代码是重要的,但更重要的是对代码进行调试,一份经过反复调试过的代码,出错率和测试通过率都会大大提高,整个项目的进程就能尽快完成。
1.为什么要进行调试?
先看上面的图片,相信很多新手刚开始编写程序都是下面这种情况,运行,不通过,改一下,再运行,还不通过,再改……最后改了几个小时之后,突然通过了,但是为什么呢?最后甚至都不知道真正的问题所在。几十行,几百行代码能允许我们这样“试错”,但是几千行,几万行呢?学会调试就必不可少了,调试可以让我们通过每一条代码,去感受程序的运行,进而发现错误,修改错误,极大的提高了软件开发的效率。
2.调试的基本步骤
(1)发现程序的错误(程序运行出错,或不符合预期结果)
(2)以隔离、消除等方式对错误进行定位(逐步调试或设置断点进行监控,找到程序运行过程中与自己期望不符合的代码行或子程序)
(3)确定错误产生的原因(算法、语法、用法、越界、逻辑等错误)
(4)提出纠正错误的解决办法(思考改进,查阅资料,浏览社区,向大神请教等)
(5)对程序错误予改正,重新测试
3.关于Debug版本和Release版本
Debug版本和Release版本是软件开发中经常使用的两种编译模式。
Debug版本是调试版本。Debug模式下生成的程序包含调试信息,不进行任何优化,便于程序员调试程序,程序员写代码经常就用的是这个版本。
Release版本是发布版本。Release模式下生成的程序不包含调试信息,是根据用户需求,进行了各种优化,以期达到代码最小和速度最优,为用户的使用提供便利
4.调试技巧
(1)调试快捷键
当电脑点击f10,f11,f9,f5不起作用时,可能是fn的问题,使用下面介绍到的调试快捷键的时候再加上fn即可
F10:逐过程调试(不会进入函数,直接将函数当语句运行)
F11:逐语句调试(进入函数,更细致)
F9:设置断点。断点,就是调试中断的地方,在需要调试中断的地方右键确定对应语句处,再按F9,即可设置断点,一个段代码可以设置多个断点。设置好断点后,在程序的前面会出现一个红圈,右击红圈,即可设置断点条件,例如i==100;
F5:运行代码,跳到下一个断点处。如果没有断点,按F5将直接运行代码结束。如果有多个断点,按F5就将按顺序运行代码至断点1,再按F5就将按顺序运行代码至断点2……
(2)调试
用vs2022举例,vs2022中要先点击F10或者F10+Fn,然后在上方界面中选择调试,在调试中选择窗口,才能找到下文所说的调试选项。其他版本编译器可能有些按键选项不同,大家可在百度进行查询。
未点击F10或者F10+Fn前的上方界面
点击F10或者F10+Fn后的上方界面
窗口监视变量
按了F10后,在调试里面找到窗口,在窗口中找到监视,在监视1、2、3、4中任选一个窗口即可
监视选项可以监视代码调试过程中变量的变化情况,用F11逐语句调试代码后,可比较监视变量的实际值与预期值的差异,进而判断代码是否在此处出错
这个是添加了监视窗口后的界面。如图为判断水仙花数的代码,现在我要观察一下代码运行过程中判断位数的变量count的变化情况,可在下方‘添加要监视的项’中输入count,即可观察变量count代码一步一步运行过程中的值是如何变化的。
但是上面的代码,i的值要改变100000次,如果要观察程序在判断位数这段是否出现错误,就不太容易了,因此还要用到F9(设置断点)中断点条件,此处分别找一个4位数和一个5位数来设置断点条件来监视程序是否正确
设置断点条件为i==56789,然后点击F5,代码就会自动运行至i==56789时,位于当时的for循环里,再点击F11可以一步一步调试后面的那个for循环,观察count的变化情况
此时i=5678,count=4,为4位数,再判断56789
此时i=56789,count=5,为5位数,正确
窗口变量内存
可在内存中任意选择一个进行监视
这是打开监视后的界面
在最右边的‘列’处,将自动改为4,可以显示4个字节的内容,再查看i的地址
在窗口中观察内存时可以直接观察到每个字节内的存储
5.调试总结
(1) 现在的软件环境在不断向着大型化 、并行化、复杂化方向发展 , 定位瑕疵的难度也在随之不断提高,完全靠读源代码来寻找bug的方法已经很难适应今天的软件发展形势,也不切实际,所以必须学会调试
(2)调试可以帮助程序员提高编写代码 的能力。因为调试可以让程序员彻底了解程序的实际执行过程,调试过程可以让程序员更好的认识到提高代码可调试性和代码质量的重要性,从此 , 自觉的改进编码方式。
编码与调试应相互结合,才能真正提高软件开发的效率
本文收录于水火莲花-C疑难专题 C语言学习专题
这两个专题可用于正在学习C语言,并且有一定基础的人,专栏持续免费更新中...