zoukankan      html  css  js  c++  java
  • 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
    0);
    const char* sz = lua_tostring(tolua_S, -1);

    CCLog(sz);

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

    <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

  • 相关阅读:
    进程、线程
    listview
    Jquery小知识点
    Jquery
    ling查询
    linq
    登陆状态显示
    母版页
    js的触发方式
    js
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/3665258.html
Copyright © 2011-2022 走看看