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