Debug in Scratch —— Part 1

Scratch 少儿编程 165浏览 0评论

友情提示:视频教程观看时请手动设置清晰度。

Debug in Scratch —— Part 1

  

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

 

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


 

 

01

 

概述

 

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

 

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

控制Scratch异步代码的执行顺序

Scratch中颜色的正确使用姿势

Scratch2.0中【碰到颜色()?】积木产生的卡顿现象及分析

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


02

调试方法

1、气泡输出法

 

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

 

Debug in Scratch —— Part 1

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

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

 

Debug in Scratch —— Part 1

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

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

优势:

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

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

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

劣势

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

Debug in Scratch —— Part 1

Debug in Scratch —— Part 1

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

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

Debug in Scratch —— Part 1

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

 

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

关于浮点运算的精度丢失问题,可以参照《每个Scratcher都应该知道的浮点运算》。

 

 

2、积木点击法

 

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

 

Debug in Scratch —— Part 1

Debug in Scratch —— Part 1

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

 

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

 

优势:

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

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

劣势:

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

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

Debug in Scratch —— Part 1

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

 

 

Debug in Scratch —— Part 1

凡事无绝对……

 

 

 

3、显示器输出法

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

Debug in Scratch —— Part 1

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

 

Debug in Scratch —— Part 1

将返回值赋值给变量

Debug in Scratch —— Part 1

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

 

Debug in Scratch —— Part 1

转载需注明作者和出处

 

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

优势:

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

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

③同文字输出法

劣势

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

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

 

 

4、计数

 

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

 

Debug in Scratch —— Part 1

用计数法统计克隆体上限

 

Debug in Scratch —— Part 1

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

 

突发奇想:

Debug in Scratch —— Part 1

我将其命名为 递归克隆  

 

执行效果请自行脑补……

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

 

优势:

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

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

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

④具有一定的通用性。

敬请期待下篇《Debug in Scratch —— Part 2》

 

转自公众号:
Scratch格物堂

您必须 登录 才能发表评论!