資訊內(nèi)容
Scratch怎么調(diào)試程序呢?看看他怎么說
??
?????在程序開發(fā)過程中,出現(xiàn)程序錯(cuò)誤 (BUG) 是不可避免的。這時(shí)候就需要對(duì)程序進(jìn)行調(diào)試,通過調(diào)試,發(fā)現(xiàn)程序錯(cuò)誤,從而著手修復(fù)BUG。
本文將介紹一些在Scratch中調(diào)試程序的實(shí)用方法。
01
概述
????編寫一段程序或許不難,難的是程序出現(xiàn)錯(cuò)誤后,調(diào)試、排查、修復(fù)的過程。與編寫程序相比,程序調(diào)試對(duì)于開發(fā)人員的水平要求更高。從教學(xué)的角度來看,學(xué)生的程序調(diào)試排錯(cuò)能力是一種層次較高的能力。學(xué)生跟著老師學(xué)習(xí)了一百個(gè)案例,每行代碼都爛熟于心,但是當(dāng)真正自己開始編寫項(xiàng)目時(shí),出現(xiàn)BUG卻手足無措。這時(shí)掌握程序排錯(cuò)方法顯得格外重要,好的調(diào)試策略是設(shè)計(jì)程序時(shí)的一件法寶。程序調(diào)試亦是學(xué)習(xí)編程對(duì)思維方式鍛煉的體現(xiàn)。
????至于程序出現(xiàn)錯(cuò)誤的原因,除了那些所有編程語言共通的原因,還有一些“Scratch 特色”的原因。是由于 Scratch 本身機(jī)制問題導(dǎo)致程序執(zhí)行結(jié)果與預(yù)期目標(biāo)不符合。一些經(jīng)典的、由于 Scratch 本身機(jī)制問題導(dǎo)致的BUG與解決方案在本公眾號(hào)的其他文章中都有提到,如
控制Scratch異步代碼的執(zhí)行順序
Scratch中顏色的正確使用姿勢(shì)
Scratch2.0中【碰到顏色()?】積木產(chǎn)生的卡頓現(xiàn)象及分析
每個(gè)Scratcher都應(yīng)該知道的浮點(diǎn)運(yùn)算
02
調(diào)試方法
1、氣泡輸出法
利用【說()】或【思考()】積木的對(duì)話氣泡,返回對(duì)象的某個(gè)參數(shù),或是報(bào)告某個(gè)條件是否成立。
利用【說()】積木使克隆體報(bào)告其ID
克隆體的局部屬性的獲取是比較麻煩的,用【說()】積木可以較為方便地查看某一個(gè)克隆體的某個(gè)局部屬性。
利用【說()】積木查看角色碰撞情況
可以十分靈敏地顯示老鼠是否碰到貓頭鷹。
優(yōu)勢(shì):
①使用起來十分方便、靈活。在程序運(yùn)行過程中想要測試某個(gè)角色在某個(gè)節(jié)點(diǎn)的參數(shù),只需把【說()】積木放置在對(duì)應(yīng)的腳本中,結(jié)果一目了然。
②通用性強(qiáng),支持多種數(shù)據(jù)類型的輸出,無論是數(shù)字類型、字符類型還是布爾類型,都可以輸出。
③且呈現(xiàn)方式直觀,多個(gè)角色的局部屬性通過這種方法可以同時(shí)在舞臺(tái)上被觀察到,而不必切換角色
劣勢(shì)
①【說()】積木會(huì)說謊,這類在舞臺(tái)中輸出內(nèi)容的積木,在輸出時(shí)都會(huì)對(duì)數(shù)據(jù)進(jìn)行一定的處理,無法獲取最真實(shí)或者說最接近真實(shí)的數(shù)據(jù)。
【說()】積木將原始數(shù)據(jù)的小數(shù)保留至百分位
氣泡輸出法會(huì)對(duì)數(shù)據(jù)進(jìn)行了一定的處理,這的確是一種優(yōu)化處理,但是在某些情況下,這種優(yōu)化反而會(huì)掩蓋事實(shí)的真相,而不利于我們修復(fù)BUG,唯物辯證法如是說。
【說()】積木忽略忽略浮點(diǎn)運(yùn)算的精度丟失問題
由此引發(fā)的程序錯(cuò)誤自然無從下手。
關(guān)于浮點(diǎn)運(yùn)算的精度丟失問題,可以參照
《每個(gè)Scratcher都應(yīng)該知道的浮點(diǎn)運(yùn)算》。
2、積木點(diǎn)擊法
顧名思義就是直接點(diǎn)擊功能積木(圓角矩形和六邊形),查看其返回值。
在積木區(qū)中直接點(diǎn)擊功能積木
官方指定調(diào)試方法,純粹為了調(diào)試而生的功能
優(yōu)勢(shì):
①方便,直接點(diǎn)擊就能看到返回值,不需要配合其他積木使用。
②數(shù)據(jù)原始,通過這種方法能拿到最一手的、未經(jīng)過任何加工處理、零添加的數(shù)據(jù)。
劣勢(shì):
①靈活性較差,具有滯后性。無法實(shí)時(shí)返回?cái)?shù)據(jù),只能返回點(diǎn)擊積木瞬間的值,如上文中貓頭鷹和老鼠的案例,老鼠碰到貓頭鷹,短短一瞬間后就離開,除非手速夠快,否則是難以用這種方法捕捉到這個(gè)瞬間的返回值的。
②通用性較差,一些特殊的積木,如【碰到(鼠標(biāo)指針)?】
通過積木點(diǎn)擊法獲取的這個(gè)積木的返回值,一定是false。點(diǎn)擊積木的瞬間,鼠標(biāo)一定是在積木上,而不可能同時(shí)出現(xiàn)在角色上。
凡事無絕對(duì)……
3、顯示器輸出法
有的圓角矩形積木是自帶顯示器的,可以勾選積木前的單選框,直接從舞臺(tái)中的顯示器觀察到其數(shù)值。
至于沒有顯示器的積木,可以通過變量來賦予它顯示器。
將返回值賦值給變量
同理,當(dāng)有多組數(shù)據(jù)時(shí),還可以通過列表顯示器來呈現(xiàn)。
轉(zhuǎn)載需注明作者和出處
顯示器輸出法類似于文字輸出法,都是將返回值直接輸出到舞臺(tái)中,可以直接進(jìn)行觀測。
優(yōu)勢(shì):
①與文字輸出法相比,界面更整潔清爽
②可以保留作用域:全局變量/局部變量
③同文字輸出法
劣勢(shì)
①需要新建變量/列表,使用起來略顯繁瑣。
②數(shù)據(jù)同樣會(huì)經(jīng)過處理,無法獲取最真實(shí)或者說最接近真實(shí)的數(shù)據(jù)。
4、計(jì)數(shù)法
借助變量統(tǒng)計(jì)一段腳本的執(zhí)行次數(shù),最經(jīng)典的做法非克隆體上限測試莫屬。
用計(jì)數(shù)法統(tǒng)計(jì)克隆體上限
變量 cloneCount 數(shù)值達(dá)到300不再增長(采用4倍速剪輯)
突發(fā)奇想:
我將其命名為?遞歸克隆??
執(zhí)行效果請(qǐng)自行腦補(bǔ)……
在一些復(fù)雜的程序中,循環(huán)到底執(zhí)行了多少次、消息發(fā)送了幾次,又接收了幾次、多少克隆體執(zhí)行了相應(yīng)的腳本,都是難以直接觀察出來的,這時(shí)候用計(jì)數(shù)法來進(jìn)行測試,結(jié)果就一目了然了,一旦計(jì)數(shù)結(jié)果與預(yù)期不符合,那就能進(jìn)一步鎖定BUG所在位置。
優(yōu)勢(shì):
①直觀,可以直觀地反映某些不直觀的腳本的執(zhí)行次數(shù),如克隆、消息。
②準(zhǔn)確性強(qiáng),除非積木放錯(cuò)測試節(jié)點(diǎn)。
③靈活性強(qiáng),“哪里不會(huì)點(diǎn)哪里”,需要測試哪段腳本的執(zhí)行次數(shù),把【將變量增加(1)】往相應(yīng)的位置一放就可以了。
④具有一定的通用性。
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時(shí)和我們聯(lián)系刪除

- 上一篇
58用scratch3.0實(shí)現(xiàn)色彩大亂斗
挑戰(zhàn)你的思維和視覺。 第一步下載腳本文件。https://pan.baidu.com/s/175zBBRAE6aFicl-TzkH1Mw第二步打開腳本文件。
- 下一篇
連機(jī)器都開始學(xué)習(xí)了,你還不學(xué)習(xí)?用scratch學(xué)習(xí)人工智能(三)
????上回我們已經(jīng)在machine learning for kids網(wǎng)站的scratch編程界面創(chuàng)建了一個(gè)空的模板項(xiàng)目,今天我們就來繼續(xù)完成這個(gè)小作品吧。 ? ? 小朋友們學(xué)習(xí)編程,最重要的是先要理清思路,把復(fù)雜的問題分解成簡單的小問題,梳理整個(gè)程序的邏