前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lua调用C++时打印堆栈信息

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

作者头像
meteoric
发布2018-11-20 14:44:38
2.8K0
发布2018-11-20 14:44:38
举报
文章被收录于专栏:游戏杂谈

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

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

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

打印lua调用堆栈的方法:

代码语言:javascript
复制
// 打印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    
            0);   
const char* sz = lua_tostring(tolua_S, -1);  

CCLog(sz);  

Ant脚本build.xml添加一项任务:

代码语言:javascript
复制
<replaceregexp file="LuaBJMEngine.cpp" 
match="^\s+self->([^;]+);$" replace='lua_getglobal(tolua_S, "debug");&#xA;lua_getfield(tolua_S, -1, "traceback");&#xA;int iError = lua_pcall(tolua_S, 0, 1, 0);&#xA;const char* sz = lua_tostring(tolua_S, -1);&#xA;CCLOG(sz);&#xA;self->\1;' 
byline="true" 
flags="g"/>

注:&#xA为换行符

参数资源:

lua调用C++函数崩溃时,查看lua的调用栈信息 (特别适用于tolua++)

cocos2d-x集成lua

导出 C/C++ API 给 Lua 使用

build.xml示例

Ant-Tasks

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-04-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档