[string "scenes/game/home/MapView.lua"]:0: table index is nil
stack traceback:
[string "scenes/game/home/MapView.lua"]: in function 'onEnter'
[string "framework/cocos2dx/NodeEx.lua"]: in function <[string "framework/cocos2dx/NodeEx.lua"]:0>
[C]: in function 'addChild'
[string "scenes/game/Game.lua"]: in function '__navigateTo'
[string "scenes/game/Game.lua"]: in function 'navigateBack'
[string "scenes/game/daily/Activeness.lua"]: in function <[string "scenes/game/daily/Activeness.lua"]:0>
以上我们看到一段脚本报错信息
cocos/lua开发模式中,分析错误信息是十分必要的
在引擎框架下脚本运行时错误会自动打印这样的信息
其实这些信息并不是"凭空"或者"自动"产生的
下面就分析一下lua脚本错误信息的产生和收集
转载请注明本文地址http://www.cnblogs.com/billyrun/articles/6257470.html
1.The Debug Library
debug是lua自带的库函数(类似)
包含脚本运行错误产生的信息
debug.getInfo/debug.traceback可以逐条/全部返回错误发生处的堆栈信息
以上打印的信息就是通过debug.traceback获取的
cocos2d-x-3.5\cocos\scripting\lua-bindings\script\init.lua
文件中定义了一个全局函数

debug.traceback(msg , 3)会返回第3层and3层以下的栈信息,并把msg拼接在了最前面
比如我从一个匿名函数开始,调用f1,f1中调用f2,f2中调用f3,f3再调用f4
f4中写一个错误的语句a=aa.aaa
错误的信息是attemp to index global aa(a nil value)
它会被拼接在最前面
堆栈信息大概是这样的

但是注意,debug.traceback(msg , 3)这里的参数3表示返回从第三层开始的信息
也就是说
in function __index
in function f4
这两条是不会被打印的
cocos这样做有点让我不理解
debug.traceback(msg , level)level可以不传,默认是1,即从顶层返回错误信息
越上层越接近错误发生的位置,应该是更加重要的