日常开发中遇到问题,如何 debug?技术教程

  • 12

日常开发中遇到问题,如何 debug?

今天跟大家分享一些 debug 的基本思想和技巧。日常开发中遇到问题,可以按照以下要点自查。

debug 的技巧与方法

1. 选一个好的 IDE

初学者一半以上的问题是低级错误,比如缩进错误(空格、tab 混用)、变量前后命名不一致(拼写错误)、函数调用时传递的参数不对、少引号括号、用了中文全角等等。这些人眼很难一下发现的错误,代码编辑器可以在写代码的时候就给你提示出来。

日常开发中遇到问题,如何 debug?

如图中,分别有一个函数名写错了、一个变量名拼错了,还有一个 if 前面的空格用了 Tab 键而不是 4 个空格。IDE 在你写代码时就会给出高亮或者波浪线的提示,把鼠标移上去还可以看到错误的提示。

另外,IDE 的一个重要功能就是可以自动补全代码,省事而且不容易出错。

2. 学会看报错信息

绝大多数问题不是直接在代码层面就出现的,而是运行时才发生。这时候正常都会导致程序中断并输出报错信息。一般从报错信息里就可以看出报错的位置和原因

日常开发中遇到问题,如何 debug?

很多初学者怕看报错信息,这不行。即使英语不好,也尝试着去看,套路就那么些,看几次你就大概熟悉了,对你调试的帮助非常大。

不过有时报错显示的位置是有问题的,这种情况通常的原因都是前面某一行的括号或者引号有问题,而导致后面的代码错乱。所以如果报错指出的位置看不出问题,试着往前看一看

在代码中使用 try...except 可以避免程序因异常中断。但在开发时不要使用异常处理,否则阻止了报错信息的发出,影响调试。

报错信息还有个用处就是可以直接复制到搜索引擎里进行搜索,而这方面不得不承认:Google 的结果比百度要好,英文网站要比中文网站好。

日常开发中遇到问题,如何 debug?

3. 别舍不得用 print

这一点是最重要的!

在程序中输出并分析 log(日志)是一种很基本但却很灵活很有效的调试方式。使用 print 就是输出 log 的最常用方法。

log 的作用主要是:

a. 确定程序的运行路径。一个函数有没有被调用,一个 if 块有没有被执行,一个 while 循环执行了几次,到了哪一步中断了,都可以通过 print 出相关信息来查看。

b. 查看变量的状态。程序自身的报错会告诉你发生了什么错误,但你还需要找出为什么会发生错误。通过 print 输出出错语句涉及到的相关变量的值和类型,可以帮助分析出错原因。

c. 找出出错位置。往往错误的原因并不在报错的位置,所以多输出一些标记,多 print 不同位置的变量值,查看变量在运行过程中值的变化情况,可以观察是在哪里发生了问题。

几个通过 log 调试的经验技巧:

a. 多输出一些辅助信息,方便自己查看,不然一堆数据看花眼。比如我一般输出时会标注上变量名,再输出变量类型,以及变量的值。比如:

日常开发中遇到问题,如何 debug?

b. 在出错行之前输出。报错行涉及的一些变量,他们的数值和类型,全都输出出来,看看和预期是否一致。

c. 一行做一件事。如果你出错的一行里连续调用了多个函数或运算,请分开写,分开输出。

d. 对于字符串,直接 print 会被转义,影响对变量实际值的观察。可以用 print(repr(text)) 或 print([text]) 的方式查看。

e. 为了方便记录和回溯问题日志,通常也会将 log 输出到文件。也有专门的 logging 模块做这事。

记住:print 不要钱,能用多少是多少!确保你清楚程序运行的状态细节。

4. 断点调试

断点(break point)是指在代码中指定位置,当程序运行到此位置时便中断下来,并让开发者可查看此时各变量的值。因断点中断的程序并没有结束,可以选择继续执行。

当然,实现断点调试需要 IDE 的支持,具体操作大家可以结合实际操作试一试。

debug 的思想和原则

前面介绍的基本是操作层面的具体 debug 方法,下面再来谈点 debug 的思想和原则

1. 缩小出错的范围

软件开发中有一个“单元测试”的概念:如果你写了一个函数,应该先运行下这个函数是不是正常,各种参数下会不会出现错误。这样可以把问题控制在较小的范围内解决。

2. 控制变量法 + 二分查找法

比如做爬虫没有抓到正确数据,那么到底是 (1)请求来的数值不对,还是 (2)文本处理方法不对?如果你认为是文本处理方法没有问题,就手动给定一个正确格式的字符串文本,应该可以得到正确的结果。这就相当于控制了因素(2),只改变因素(1),根据执行结果就可以确认或排除问题的所在

二分查找法是一个定位问题的技巧。如果你的代码里有问题,那么问题要么在前半段,要么在后半段。你先把后半段代码去掉执行,看看程序是否还报错,就知道错误在哪部分。以此类推,不断折半,直到找到引发报错的代码

3. 先重现,再解决,最后验证

有的错误不是每次出现。这时候最好别急着去改代码,而是想办法可以稳定重现问题。当你能顺利重现问题的时候,通常离分析解决它也不远了。解决了之后,再按照之前重现的方式验证修改是否确实有效。

4. 想清楚再动手

不论是开发代码,还是调试 debug,在做一个动作前要清楚自己的目的是什么,而不是盲目地进行改动。要恪守逻辑,知道现在要解决的问题是什么,需要得到哪些信息,可能的假设是什么,如何通过修改代码去验证你的判断,这样才是合理的 debug 方式。

结语

以上就是一些 debug 的基本思想和技巧,希望对大家有所帮助。

📚文章说明:
1、本文章链接失效后,请通过右下角企鹅QQ告知管理员,24小时内补链接,谢谢。点击下载说明了解。
2、天天精品分享的资源均通过网络公开合法渠道获取的,仅阅读交流测试使用,请在下载后24小时内删除。
3、版权归作者或出版社方所有,本站不对涉及的版权问题负法律责任。点击免责申明了解详情。
4、若版权方认为天天精品侵权,请联系客服QQ或发送邮件myttjp@163.com处理。
5、会员和精品豆系对搜集搬运、整理及网站运营做的友情赞助,非购买文件费用,敬请谅解。点击关于本站了解本站。
6、每位访客应尊重版权方的知识产权,支持版权方和出版社。

发表评论