首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scratch怎么调试程序呢?看看他怎么说

在程序开发过程中,出现程序错误 (BUG) 是不可避免的。这时候就需要对程序进行调试,通过调试,发现程序错误,从而着手修复BUG。

本文将介绍一些在Scratch中调试程序的实用方法。

01

概述

编写一段程序或许不难,难的是程序出现错误后,调试、排查、修复的过程。与编写程序相比,程序调试对于开发人员的水平要求更高。从教学的角度来看,学生的程序调试排错能力是一种层次较高的能力。学生跟着老师学习了一百个案例,每行代码都烂熟于心,但是当真正自己开始编写项目时,出现BUG却手足无措。这时掌握程序排错方法显得格外重要,好的调试策略是设计程序时的一件法宝。程序调试亦是学习编程对思维方式锻炼的体现。

至于程序出现错误的原因,除了那些所有编程语言共通的原因,还有一些“Scratch 特色”的原因。是由于 Scratch 本身机制问题导致程序执行结果与预期目标不符合。一些经典的、由于 Scratch 本身机制问题导致的BUG与解决方案在本公众号的其他文章中都有提到,如

02

调试方法

1、气泡输出法

利用【说()】或【思考()】积木的对话气泡,返回对象的某个参数,或是报告某个条件是否成立。

利用【说()】积木使克隆体报告其ID

克隆体的局部属性的获取是比较麻烦的,用【说()】积木可以较为方便地查看某一个克隆体的某个局部属性。

利用【说()】积木查看角色碰撞情况

可以十分灵敏地显示老鼠是否碰到猫头鹰。

优势:

使用起来十分方便、灵活。在程序运行过程中想要测试某个角色在某个节点的参数,只需把【说()】积木放置在对应的脚本中,结果一目了然。

通用性强,支持多种数据类型的输出,无论是数字类型、字符类型还是布尔类型,都可以输出。

且呈现方式直观,多个角色的局部属性通过这种方法可以同时在舞台上被观察到,而不必切换角色

劣势

【说()】积木会说谎,这类在舞台中输出内容的积木,在输出时都会对数据进行一定的处理,无法获取最真实或者说最接近真实的数据。

【说()】积木将原始数据的小数保留至百分位

气泡输出法会对数据进行了一定的处理,这的确是一种优化处理,但是在某些情况下,这种优化反而会掩盖事实的真相,而不利于我们修复BUG,唯物辩证法如是说。

【说()】积木忽略忽略浮点运算的精度丢失问题

由此引发的程序错误自然无从下手。

关于浮点运算的精度丢失问题,可以参照

《每个Scratcher都应该知道的浮点运算》。

2、积木点击法

顾名思义就是直接点击功能积木(圆角矩形和六边形),查看其返回值。

在积木区中直接点击功能积木

官方指定调试方法,纯粹为了调试而生的功能

优势:

方便,直接点击就能看到返回值,不需要配合其他积木使用。

数据原始,通过这种方法能拿到最一手的、未经过任何加工处理、零添加的数据。

劣势:

灵活性较差,具有滞后性。无法实时返回数据,只能返回点击积木瞬间的值,如上文中猫头鹰和老鼠的案例,老鼠碰到猫头鹰,短短一瞬间后就离开,除非手速够快,否则是难以用这种方法捕捉到这个瞬间的返回值的。

通用性较差,一些特殊的积木,如【碰到(鼠标指针)?】

通过积木点击法获取的这个积木的返回值,一定是false。点击积木的瞬间,鼠标一定是在积木上,而不可能同时出现在角色上。

凡事无绝对……

3、显示器输出法

有的圆角矩形积木是自带显示器的,可以勾选积木前的单选框,直接从舞台中的显示器观察到其数值。

至于没有显示器的积木,可以通过变量来赋予它显示器。

将返回值赋值给变量

同理,当有多组数据时,还可以通过列表显示器来呈现。

转载需注明作者和出处

显示器输出法类似于文字输出法,都是将返回值直接输出到舞台中,可以直接进行观测。

优势:

与文字输出法相比,界面更整洁清爽

可以保留作用域:全局变量/局部变量

同文字输出法

劣势

需要新建变量/列表,使用起来略显繁琐。

数据同样会经过处理,无法获取最真实或者说最接近真实的数据。

4、计数法

借助变量统计一段脚本的执行次数,最经典的做法非克隆体上限测试莫属。

用计数法统计克隆体上限

变量 cloneCount 数值达到300不再增长(采用4倍速剪辑)

突发奇想:

我将其命名为递归克隆

执行效果请自行脑补……

在一些复杂的程序中,循环到底执行了多少次、消息发送了几次,又接收了几次、多少克隆体执行了相应的脚本,都是难以直接观察出来的,这时候用计数法来进行测试,结果就一目了然了,一旦计数结果与预期不符合,那就能进一步锁定BUG所在位置。

优势:

直观,可以直观地反映某些不直观的脚本的执行次数,如克隆、消息。

准确性强,除非积木放错测试节点。

灵活性强,“哪里不会点哪里”,需要测试哪段脚本的执行次数,把【将变量增加(1)】往相应的位置一放就可以了。

具有一定的通用性。

作者:小阿斌

【Scratch 格物堂】投稿

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190929A0387600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券