惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
F
Fortinet All Blogs
有赞技术团队
有赞技术团队
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
量子位
博客园 - 聂微东
S
SegmentFault 最新的问题
月光博客
月光博客
爱范儿
爱范儿
罗磊的独立博客
博客园_首页
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
G
GRAHAM CLULEY
大猫的无限游戏
大猫的无限游戏
K
Kaspersky official blog
小众软件
小众软件
Simon Willison's Weblog
Simon Willison's Weblog
T
Threatpost
美团技术团队
T
The Blog of Author Tim Ferriss
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
C
Cyber Attacks, Cyber Crime and Cyber Security
酷 壳 – CoolShell
酷 壳 – CoolShell
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
Know Your Adversary
Know Your Adversary
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
T
Tor Project blog
S
Security Affairs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Vercel News
Vercel News
博客园 - Franky
IT之家
IT之家
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
O
OpenAI News
N
News and Events Feed by Topic
Y
Y Combinator Blog
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
调试 Snap! 程序
种瓜 · 2024-04-29 · via 夜行人

文章目录

前言

调试比编写程序要困难两倍。如果你在编程时使出了所有聪明,那你要如何调试它呢? – 《The Elements of Programming Style》

调试功能是 Snap! 相比于 Scratch 的最大改进之一。

这个改进极大增强了可理解性, 尤其是复杂程序的可理解性。没有调试功能, 构建和理解大型程序都是令人生畏的。

在调试中理解程序,而不是通过阅读代码来理解程序, 是 Smalltalk 的传统之一。在 Smalltalk 中, 所有的开发工作都可以在调试器中完成, 人们喜欢以调试为中心的编程(这导致了测试驱动, 测试驱动(TDD)范式最初来自 Smalltalk)。作为 Smalltalk 的后代, Snap! 具有出色的调试能力。

我们在施乐帕克实验室的工作并不是研究计算, 而是研究人 – Alan Kay

Smalltalk 鼓励用户与程序交互, 并在交互中建立理解。这是人类习惯的认知方式。 我们生活在物理世界中, 物理世界的交互性极好(一致性也极其出色), 我们在出生之后,不是通过阅读这个世界的说明书(物理学)来理解世界的,而是在交互/反馈循环中理解这个世界。

宇宙最不可理解之处, 在于它是可理解的 –爱因斯坦

调试这个程序

(可参考 视频教程)

我们可以通过调试这个简单程序来弄清楚 Snap! 的所有调试功能:

这个程序非常简单, 它将循环 1000 次, 每次会把当前循环计数说出来, 程序在运行过程中会修改一个全局变量。 通过暂停和恢复程序, 并观察变量的变化, 对比你的预期和实际结果, 在这个过程弄清 Snap! 的调试功能。

红色箭头所指的之处是 Snap! 中与调试有关的东西:

  1. 单步运行(step)开关, 点击开启时, 程序将单步运行, 当前运行的积木将被高亮。 用户可以通过 slider 控制单步运行的速度, 拉到最左边, 每次运行一个积木
  2. 暂停和恢复程序
  3. 程序将停止在这个积木位置。类似其他编程语言的断点

条件断点

如果你只希望在 i==50 时暂停程序, 可以这样做:

其他调试技巧

前边的调试都属于断点调试

打印 log 是另一种常见的调试方法, 介绍 3 种打印 log 的方式

  • say
  • debuglog
  • console.log

say

使用 say 积木是最简单的 log 方式, 它每次只能显示一条信息,适用于简单调试。

debugLog

debugLog 的想法是使用一个变量(列表)来存下所有记录的信息.

我在 dynatalk 库 中使用了这个技巧:

@邵悦 在 MicroBlocks 也有类似做法 如何使用MicroBlocks中的 log4M 日志库,实时监控程序进程

或许我们应该在 Snap! 中将 debugLog 剥离为一个库, 就像 @邵悦 在 MicroBlocks 里做的。

console.log

使用浏览器的 console.log 来记录 log:

我们可以通过 JavaSccript function 来使用 console.log。 你需要先开启 JavaScript 扩展。

FAQ

启动和停止按钮如何影响程序生命周期?

  • 启动: 只影响绿旗触发的程序
  • 停止: 停止所有正在运行的程序

值得注意的是, 它们都不会重置程序的状态! 诸如本文例子中的 test 变量状态不会被重置(动手做个实验试试)

如何调试自定义积木?

开启调试模式的情况下, 展开自定积木, 会逐个高亮运行内部积木:

参考