cocos2d lua debug.traceback

[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

文件中定义了一个全局函数

cocos2d lua debug.traceback_第1张图片

 

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)

它会被拼接在最前面

堆栈信息大概是这样的

cocos2d lua debug.traceback_第2张图片

但是注意,debug.traceback(msg , 3)这里的参数3表示返回从第三层开始的信息

也就是说

in function __index

in function f4

这两条是不会被打印的

cocos这样做有点让我不理解

debug.traceback(msg , level)level可以不传,默认是1,即从顶层返回错误信息

越上层越接近错误发生的位置,应该是更加重要的

你可能感兴趣的:(cocos2d-lua)