错误与异常
前言与确认
写代码的过程中,报错是家常便饭——连老手也天天在跟报错打交道。所以,会看报错比“从不报错”重要得多。这一节,我们来认识报错信息,并学会让程序在必要时主动“喊停”。
先确认一下我们现有的工程文件夹结构:
root/
├─ emuera.config
├─ Emuera1824.exe
├─ CSV/
└─ ERB/
└─ System.erb其中,System.erb的代码为:
@EventFirst
Print Hello World!
Quit报错信息长什么样
当脚本出问题时,Emuera 会在画面上打印一段错误信息,大致像这样:
它一般会告诉你两件事:在哪里出错、出了什么错。把这两点看明白,问题就解决了一半。
最常见的几种错误
找不到函数
这通常意味着你拼错了函数名,或者忘了定义该函数。比如引擎要调用 @EVENTFIRST,而你的脚本里写的是 @EventFrist(字母顺序错了)。
缺了 ENDIF
复合语句讲究“成对出现”:IF…ENDIF、REPEAT…REND、FOR…NEXT。少写一个结尾,就会报这种错。检查时可以用编辑器的括号配对/折叠功能,一眼就能看出哪一层没闭合。
类型对不上
多是把字符串塞进了数值变量(或反过来)。检查一下 #Dim 是不是该写成 #DimS,字符串有没有加引号。
访问越界
数组是“从 0 开始”的:A:0 是第 1 个元素。如果你写 A:10,而这个数组只有 10 个元素(可用下标 0~9),就会越界。
脚本意外结束
多半是某个函数写了一半,或者复合语句没写完。回头看看出错位置附近,是不是少了几行。
找不到原因?去看日志
报错框旁边常会提示:
※※※ログファイルをroot/emuera.logに出力しました※※※
打开根目录下的 emuera.log,里面有更详细的记录:出错的文件名、行号、函数名等等。报错框没看明白时,日志往往能给出更多线索。
调试模式
如果错误实在难找,可以以调试模式启动 Emuera(命令行加 -debug 参数)。调试模式会提供变量查看、逐行执行等工具,能帮你一步步定位问题。
普通模式与调试模式的更多区别,可以参考调试模式。
主动报错
有时候,我们希望“如果出现了不该出现的情况,就立刻停下来”。这时可以用:
ASSERT <表达式>:表达式为假(0)时,输出错误并停止;THROW <FORM 格式文本>:直接输出一条自定义错误并停止。
@EventFirst
#Dim Money = 100
ASSERT Money >= 0
SIF Money < 0
THROW 金币变成了负数:{Money}
QuitASSERT 适合在开发阶段“守门”,一旦某个前提不成立就马上提醒你;THROW 则适合给出更人性化的错误说明。
小结
- 报错信息告诉我们在哪里、出了什么错;
- 常见错误:找不到函数、缺少
ENDIF、类型不一致、数组越界、脚本意外结束; - 看不明白时,去根目录翻
emuera.log; - 需要更强大的排查工具时,用调试模式;
- 可以用
ASSERT/THROW让程序主动报错。
下一步,我们把前面学到的东西串起来,看看一个游戏是怎么“跑起来”的:内置流程。