断点与单步
在一块积木上设断点,作品运行到那里就会停住,然后可以查看调用栈和变量、一块一块往下走。 用法与代码调试器一致,区别只在于这里的「一行」是一块积木。

怎么下断点#
两种方式,效果相同:
- 按住
Shift点一块积木。再点一次取消。 - 右键积木,菜单里有「设断点」;已经有断点时这一项是「取消断点」。

断点用 Shift 而不是 Alt 或 Ctrl,因为后两个键在积木上已有别的用途:内置插件
「选择特定积木」用 Alt 拖动复制、用 Ctrl 框选。
设好之后积木左边缘会多一枚圆点:

圆点画在积木自身的图形里,拖动、滚动、缩放时都跟着积木走,不会错位。切换角色会重建 工作区,圆点在半秒内自动补齐。
删除积木时断点一并删除。 如果作品正停在被删掉的那块积木上,运行会自动继续,否则 作品会一直停在一块不存在的积木上。
命中断点时#
作品停住,画面继续绘制,脚本不再推进。工具条上的「暂停」变成绿色的「继续」,右边亮起 「已暂停」。命中时如果停在「概览」或「日志」页,会自动切到「断点」页。默认还会切到对应 角色、把工作区滚到那块积木并闪一下,这一行为由「暂停时跳到积木」勾选框控制。

标题一行写明停下的原因:断点、变量被改、事件还是手动暂停;第几次命中;哪个角色。
调用栈从上往下是从里到外,最上面那条标着「停在这」,就是当前块。遇到自制积木会写成 「调用 过程名」。点任意一层跳到那块积木。
变量·直接改列出这个角色能看到的变量:它自己的,加上舞台的(全局的会标出来)。输入框 里的值可以直接改,回车或点别处生效,不必改脚本再重跑一遍。列表只显示前几项,不在这里改, 要改去「监视」页。超过 2000 字的值只能查看,不能修改。
工作区里那块积木也有标记:

粉红色的圆点是断点,左边那枚小箭头表示线程当前执行到这里。停下的那块,箭头换成「停下的 积木」的颜色,并左右小幅摆动,积木本身也描一圈同色的边。两个颜色都能在「外观」页改。
单步执行#

| 按钮 | 快捷键 | 走到哪 |
|---|---|---|
| 继续 | F8 |
恢复所有线程,运行到下一个断点 |
| 单步 | F9 |
走一块。当前块是自制积木调用时,进入过程内部 |
| 跳过 | F10 |
走一块,但自制积木整段执行完,停在它后面那块 |
| 跳出 | Shift + F9 |
执行完当前过程,回到调用它的地方 |
暂停的语义是停在这块积木之前,该块尚未执行。所以停在「将 得分 增加 1」上时,变量表里 的得分还是旧值,按一次「单步」才会变。
单步期间其它线程全部挂起,包括单步途中新建的线程,否则单步时别的脚本会继续往下跑。
「继续」之后不会在原地再停一次:停下的那块被放过一次,执行到别的块再恢复。所以循环里的 断点每圈停一次,不会反复停在同一块上。
快捷键在输入框里不响应,因此在条件框里打字不会误触发。
不设断点也能停:按 F8(或点「暂停」)会停在第一条正在运行的线程上,同样可以查看调用栈、
改变量、继续单步;一条线程都没有时,只是把作品冻住。
断点的附加设置#
「断点」页每条断点下面有三个小框:

条件#
只在条件成立时才停。写法是把变量名用大括号括起来:
{得分} > 100000
{血量} < 10 and {关卡} = 3
not {暂停中}{名字}取变量的值,先找当前角色的,找不到再找舞台的。andornot就是「与」「或」「不成立」,也能直接写&&||!。- 单个
=会当成相等来判断,==也行。 - 看起来是数字的值会按数字比较。
写错了会在「日志」页留一条「条件写法不对」;条件在运行时抛错会留一条「断点条件出错」, 然后当作不成立继续跑。
每 N 次停#
填 500 就是每命中 500 次停一次。计数是这块积木被经过的次数,标题右边的「命中 N 次」 就是这个计数。循环里的断点不填这一项通常无法使用。
日志#
填了就只打印不停:作品照常运行,每次经过这块积木往「日志」页写一条。模板里的
{变量名} 会换成当时的值,列表会写成 [N 项]:
血量掉到 {血量},得分 {得分}它相当于 Scratch 版的 console.log。与用「说」积木打印相比,它不占舞台、不改作品,
关掉面板就清除。日志点在循环里一帧能打几千条,「日志」页会把连续相同的合并成「×N」。
停用而不删#
每条断点右边有三个按钮:「跳到积木」、启用 / 停用(实心圈是启用,空心圈是停用)、删除。 停用的断点仍留在表里,那一行变暗,积木上的圆点则收起。适合临时关掉某个断点,又不想重新 找那块积木。

不在积木上的断点#
面板最下面一排是另外三种:

变量被改时停#
下拉里选一个变量,点「加」。此后任何对这个变量的写入都会停下来,不论出自哪段脚本。 排查某个变量被谁改动时,这一条最快。

标题里会写明改前改后:得分:825400 → 825401。
「监视」页每个变量右边也有一颗同样作用的按钮(◉),不必回到这一页来加。
列表不支持这种断点,下拉里也不会列出来。
广播时停#
填一个广播名,点「加」。这条广播发出的那一刻停在发出它的那块积木上,而不是接收方。 用它来确认广播是谁发的。

克隆时停#
勾上之后,每次有克隆体被创建就停在那块「克隆 …」积木上。
变量断点和这两种事件断点,都是在积木执行到一半时停的:广播已经发出去了、变量已经改 完了。所以「继续」时这块积木不会重跑一遍,直接从下一块开始,否则会再发一次广播、再改一次 变量。
「全部清除」把这三类连同积木上的断点一起清掉。
查看当前线程#
「线程」页最上面那行是实时的,点「展开」列出此刻每一条线程:

每行是角色、正在运行的那段脚本、状态(运行中 / 等待 Promise / 让出 / 等下一帧 / 已结束; 被单步挂起的写「按住」),后面两颗按钮:⌖ 跳到它当前那块积木,⏸ 把这条线程停下来。 最多列 60 条。
暂停中的行是橙色的。
工作区上的「运行到哪」#
面板开着的时候,每条线程当前停的那块积木旁边会有一个小箭头,整块还会描一圈蓝边。两帧之间 线程会停在等待、循环末尾或让出的地方,箭头指的就是那里。最多同时画 40 个。
不需要时可以在「外观」页把「运行到哪」关掉。
细节#
- 断点只在解释模式下有效。 编译模式把脚本编译成了 JavaScript,里面看不到积木。 面板设第一个断点时会自动切成解释模式,并在「日志」页留一条提示;断点全部清空后自动 切回去。工具条右边的「解释」/「编译」胶囊显示当前是哪种。
- 「暂停」定住的是整个作品(画面还在绘制),不是只停一条线程。只停一条线程用「线程」页 那颗 ⏸。
- 停在断点上时,那段脚本仍带着「脚本正在运行」的黄光。那是运行状态的常规提示,不是调试器 画的,停下的那块要靠圆点和箭头辨认。
- 断点、条件、日志点都不会写进作品文件,关掉编辑器后即清除。
相关#
- 调试工作台 —— 面板总览与性能录制
- 诊断规则与日志 —— 日志点打出来的东西在哪看
- 监视、渲染、内存与舞台仪表 —— 不停下来也能改变量