相关文章推荐
善良的鞭炮  ·  oracle ...·  1 年前    · 
玩命的吐司  ·  The proteomic ...·  2 年前    · 
备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 游戏杂谈 Lua调用C++时打印堆栈信息
2 0

海报分享

Lua调用C++时打印堆栈信息

公司的手游项目,使用的是基于cocos2d-x绑lua的解决方案(参数quick-x的绑定),虽然使用了lua进行开发,更新很爽了,但是崩溃依然较为严重,从后台查看崩溃日志时,基本上只能靠“猜”来复现bug。更为郁闷的是很多时候并没有使用log输出,在崩溃日志里还无法查看大概在哪一步操作崩溃的…

后来在网上搜索了一下,受到一点启发,lua代码在执行的时候可随时调用debug.traceback()方法来获得调用栈的字符串信息,如下图所示:

而c++导出方法给lua调用,是使用tolua++工具实现的,通过ant实现将多个pkg文件生成一个cpp文件。所以只能在ant的build.xml配置中想办法了,好在ant本身就支持正则的任务“ReplaceRegExp”,在调用的方法前面添加打印堆栈的方法即可。

打印lua调用堆栈的方法:

// 打印lua调用栈开始  
lua_getglobal(tolua_S, "debug");  
lua_getfield(tolua_S, -1, "traceback");  
int iError = lua_pcall( tolua_S,//VMachine    
            0,//Argument Count    
            1,//Return Value Count    
const char* sz = lua_tostring(tolua_S, -1);