公告:九九网站目录为广大站长提供免费收录网站服务,会员可在线完成投稿无需添加友情链接。只收录内容正规合法的网站;快审网站软文10元

点击这里在线咨询客服
新站提交
  • 网站:8462
  • 待审:16
  • 小程序:9
  • 文章:3610
  • 会员:21113

 

最近在极客战记用户群里常常能收到许多让人哭笑不得的问题,例如:

某同学 A 的程序无一处报错,但运行起来,却得不到想要的结果。

于是群里的大家便纷纷帮他查看代码有无错误,始终找不到问题,有人将他的代码一段段进行编译,最后终于发现是他把一处嵌套的次序写反了,一个简单的次序调换起来,程序也许不会报错,但最终得到的结果却会大有不同。

正所谓「授人以鱼,不如授人以渔」,对于大多数新手的学习,语法的填充固然重要,但懂得读代码,学会调试代码,也是新手入门所不可或缺的一项技能。

可这恰恰却是许多教程课程里不曾提及的,所以今天就来讲讲对新人来说简单易懂,但必须要掌握的调试技巧。

一、小黄鸭调试法:

所谓小黄鸭调试法,其实指的就是阅读代码分析错误的一个过程。你可以对着电脑旁的一个小黄鸭玩偶,慢慢地跟它讲讲代码的运行过程,于是自然就能在出错处发现不对劲的地方。

例如:新手向大神提问,新人按代码运行流程讲自己的问题,一步步讲下来,大神只言未语,新人突然便恍然大悟,悟出了错误之处——这也是小黄鸭调试法。

小黄鸭调试法的关键,不是小黄鸭,而是分情况进行阅读代码,许多新人在碰到问题时,一看到问题就头大,就去寻求帮助,这其实是不对的,自主阅读代码,寻找错误,能够带来更大的帮助。

1、在程序报错的情况下:

当程序出现了报错,首先要做的是分析错误,看看报错的原因,是少导入了包,还是哪里没定义,亦或是哪里手滑敲错了代码,定位到报错位置,寻找到报错位置相关的代码,此类错误一般较快都能进行解决。

2、程序未报错情况,得不到正确结果:

这种情况的错误就比较棘手了,一般都是逻辑错误,但没有具体的报错提示,面对一大串代码,不知道错在哪里,也是蛮痛苦的。

遇到这种情况,我们最好是能够从结果入手开始分析。

通过这个结果,思考,这部分结果是从哪个地方算出来的?跟这个结果有关的代码是什么?迅速定位代码的未知,缩小查错的范围,自己在脑内将代码运行一遍,理解错误的产生,以寻找到错误点。

3、最万能的办法:

该办法适用于所有情况,直接从代码最开始,代入一个可能的值,然后从开头(或是你认为有必要开始的地方),直接在脑内,将代码运行过程过一遍,正如对着小黄鸭讲出代码运行过程一样,如果你觉得过程较为复杂,那你还可以使用一张流程图,将运行的过程记录下来,把各过程的数值记录在相应流程旁,代码的完整运行过程清晰可见。

就如同高考时的数学流程题一样

二、Print()输出调试法:

当然除了简单粗暴的小黄鸭调试法外,print() 输出调试法也是一种很常用的调试方法,它的使用更为灵活。

在极客战记内,hero.say()——让英雄说话,其作用与 print() 输出相同,在下面,我们来看看极客战记的特约作者Pony所写的:如何使用 hero.say() 来对代码进行调试。


来看这样的一个小案例,

在关卡:

https://codecombat.163.com/play/level/kithgard-brawl

中有一个同学,在运行以下代码时遇到了死循环的问题,不知道怎么解。

接下来我们尝试用「say」来举例该问题的调试方法。

(在这里我们不谈他的代码的好坏,仅针对他的思路调试出问题)

用法一:看程序是否运行到某处

上面有 3 个 while,那到底是在哪生了死循环呢?我们先在最下面的 while 里加一句,hero.say (已经运行到这里了!)。结果发现,英雄一直并未说出这句话。说明,下面的内容,程序根本没有运行到。

接下来我们在第二个while里写了一句 hero.say (已经运行到这里了!)。这里我们发现,英雄一直在反复说这句话。说明这里出现了问题!!!

用法二:看程序中某些你关心的变量内容

既然我们知道了,是第 2 个 while 产生的死循环。那么,很明显,我们应该关心 indx 的值的变化。

我们只需要 hero.say(indx),就很明显的发现indx被卡在了固定的一个数字,并没有按我们的想的往下 +1。

说明逻辑出现了问题,这时我们再看,发现 indx+ = 1 写在了enemyhealth < enemies[indx].health 条件下,反过来当条件不成单时就不会再加1。这就是一直无法跳出的原因!!知道了原因,再来改就很简单了。如下:

以上就是用 say 来调试一个小 BUG 的的案例,而在真实的编程环境中,我们也可使用 print() 语句,按照上文中的思想,一一插入相应的位置,观察真实的代码运行情况。


在本文里,为大家介绍了两种新手必须要懂得代码调试方法,而在未来,等到新手们掌握了一定的编程基础,懂得了编译器的使用,你们还能够学到如断点调试法等更有效的调试方法,也希望今天教给大家的方法,能够成为各位新手入门的一大助力。

文中用到的案例均来自极客战记(http://codecombat.163.com),学编程用玩的。

分享到:

  admin

注册时间:

网站:0 个   小程序:3 个  文章:0 篇

  • 462

    网站

  • 9

    小程序

  • 3610

    文章

  • 113

    会员

赶快注册账号,推广您的网站吧!
热门网站
最新入驻小程序

跳一跳2022-08-22

跳一跳是微信开发的一款小游戏,有

数独大挑战2018-06-03

数独一种数学游戏,玩家需要根据9

答题星2018-06-03

您可以通过答题星轻松地创建试卷

全阶人生考试2018-06-03

各种考试题,题库,初中,高中,大学四六

运动步数有氧达人2018-06-03

记录运动步数,积累氧气值。还可偷

每日养生app2018-06-03

每日养生,天天健康