代码调试技巧

简介: 代码调试技巧

本文将介绍编写程序过程中最重要的一环,调试代码。刚开始,我们可能会花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)调试可以帮助程序员提高编写代码 的能力。因为调试可以让程序员彻底了解程序的实际执行过程,调试过程可以让程序员更好的认识到提高代码可调试性和代码质量的重要性,从此 , 自觉的改进编码方式。

编码与调试应相互结合,才能真正提高软件开发的效率


相关文章
|
4月前
|
Go iOS开发 MacOS
学习笔记-代码调试工具
dlv(delve的简称)是一个强大的Go源代码级调试工具,通过控制程序执行、计算变量及提供线程/协程状态等信息,为调试Go程序提供了简单且功能丰富的界面。在macOS上,可以通过`brew install dlv`命令安装。下面是一个使用dlv调试Go代码的例子,展示了如何设置断点并逐步执行代码,检查变量值和函数内部细节。常用命令包括:`b`(打断点)、`p`(打印变量)、`n`(下一步)、`c`(继续执行)、`args`(打印参数)、`locals`(打印局部变量)、`l`(列出代码)、`bp`(显示断点)和`q`(退出)。
52 2
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
62 1
|
7月前
|
Linux Swift iOS开发
LLDB:强大的源代码级调试工具
LLDB:强大的源代码级调试工具
434 0
|
JavaScript 前端开发 数据可视化
自动调试自动编译五分钟上手
自动调试自动编译五分钟上手
59 0
|
算法 Java C#
分享一个在Keil开发环境中配置代码格式化工具Astyle(美化代码风格)
分享一个在Keil开发环境中配置代码格式化工具Astyle(美化代码风格)
1124 1
|
C++
VS中断点调试的功能
VS中断点调试的功能
109 0
|
Java C# 开发工具
9个最好用的在线编译/调试工具
电脑没有C/C++的开发环境了,只能找找在线的编译器。。IDEone不错。。。 本文要推荐9个最好用的在线编译器,以下顺序不按排名先后: 1、ideone 可以在线编译、调试C/C++,JAVA,PHP,Python,Perl,以及其他40多种编程语言。
2940 0
|
IDE Java 程序员
什么是代码调试(debugging)?进行代码调试的基本方法有哪些?
什么是代码调试(debugging)?进行代码调试的基本方法有哪些?
736 0
什么是代码调试(debugging)?进行代码调试的基本方法有哪些?
|
IDE Java 开发工具
掌握调试助手,编程如履平地——IDEA Debugger
掌握调试助手,编程如履平地——IDEA Debugger
292 0
掌握调试助手,编程如履平地——IDEA Debugger