常见报错翻译和排查技巧
| 报错信息 | 解析 |
|---|---|
| attempt to index a nil value | 试图访问一个空值的属性或方法,一般来说是语句中的某个参数是空值,可以考虑用『输出调试日志』的方法来看看到底哪个值是nil |
| cannot wrap coroutine by main thread!!! | 主线程中不能包裹协程,一般出现在公式里使用等待或计时器调用云变量语句中,可以参考TapTap案例:如何解决协程冲突的问题 |
| badloop! free game session soon more than 200,000,000 lua instructions in one tick, maybe bad loop C stack overflow | 逻辑中存在死循环或无限递归,如果该报错发生在服务端,会导致游戏局立刻结束 出现该问题的典型情况: 1.A函数调用B函数,B函数调用A函数 2.while语句条件有误,导致循环体持续执行 |
| number expected, got number | 函数中传入的参数为inf(任意数值除以0)或NaN(0除以0) |
| common/base/lualib_bundle.lua:808: attempt to index a nil value (local 'target') | 触发器内尝试引用类或事件失败 需要在触发编辑器内将所有的类和事件定 义放在触发器的上方 |
| 报错信息:projectName(项目名)/trigger_module_main.lua:XXX | 这里的XXX代表的是报错信息所在的lua文件的行数,也可以从这里去排查报错的原因 |
| 报错信息:projectName(项目名)/trigger_validator.lua: XXX | 这里的XXX代表的是报错信息所在的lua文件的行数,去trigger_validator.lua文件找到报错行数中报错的公式id,![]() 然后去trigger_validator.ts文件中搜索公式id找到报错的公式,就可以排查报错的原因了![]() ![]() |
| 触发器的服务端代码生成路径 | script/trigger_module_main_X.lua(X为任意数字),最好用vscode或者其他代码开发工具打开 |
| 触发器的客户端代码生成路径 | ui/script/trigger_module_main_X.lua(X为任意数字),最好用vscode或者其他代码开发工具打开 |
1.客户端/服务端遇到报错信息如何定位(找lua再找对应的触发)
提示:一般服务端的代码存储在项目根目录的script文件夹中,而客户端代码存储在项目根目录下ui/script文件夹中
服务端报错

根据错误提示我们可以知道这个问题是我们在trigger_module_main_1.lua文件的第122行出现了问题,且问题报错为:索引为空
因此我们打开项目文件的script文件寻找trigger_module_main_1.lua文件并打开

我们可以看到在blink_ex(base.scene_point(1, 1, 0, "default"))这一行我们通过对局部变量新变量进行索引,但是并未对新变量赋值进而导致attempt to index a nil value报错;


然后去trigger_validator.ts文件中搜索公式id找到报错的公式,就可以排查报错的原因了
