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"); lua_getfield(tolua_S, -1, "traceback"); int iError = lua_pcall(tolua_S, 0, 1, 0); const char* sz = lua_tostring(tolua_S, -1); CCLOG(sz); self->\1;'
byline="true"
flags="g"/>
注:
为换行符
参数资源:
lua调用C++函数崩溃时,查看lua的调用栈信息 (特别适用于tolua++)
Lua调用C++时打印堆栈信息的更多相关文章
- log显示error时的堆栈信息理解和分析
error显示的log堆栈信息,是从最深层(最内层)的堆栈信息开始由内向外打印的. error显示的log堆栈信息,是从最深层(最内层)的堆栈信息开始由内向外打印的. error显示的log堆栈信息, ...
- log4j打印堆栈信息
原文地址:https://blog.csdn.net/xianyu_0418/article/details/6043174 大家都知道,网站在运行的过程中,打印必要的log对记录网站的运行情况.从而 ...
- SpringBoot-技术专区-详细打印启动时异常堆栈信息
SpringBoot在项目启动时如果遇到异常并不能友好的打印出具体的堆栈错误信息,我们只能查看到简单的错误消息,以致于并不能及时解决发生的问题,针对这个问题SpringBoot提供了故障分析仪的概念( ...
- C/C++打印堆栈信息
转自:http://www.cnblogs.com/zhurizhe/p/3412369.html 在C/C++程序中打印当前函数调用栈 前几天帮同事跟踪的一个程序莫名退出,没有core dump(当 ...
- 转:Xcode打印堆栈信息
2# 分享于 14-11-26 19:15:36 Chrome 39.0.2171.71 Mac OS X 10.10.1 如果只是看调用栈的话,可以使用 lldb 的功能.在你的代码里面打上一个 ...
- java Exception 出错的栈信息打印到日志中 打印堆栈信息
我们在开发程序的过程当中,日志是必不可少的工具,这有助于我们分析问题的原因,和出错的详细信息,而java的异常机制又会方便且迅速的帮我们找到出错行的位置. try { .... } catch (Ex ...
- 如何让ubuntu启动时打印字符信息----字符启动
一.概述 要想实现字符启动,需要修改grub.cfg(启动配置文件),将“静态启动”改为“字符启动”. 但是grub.cfg通常只作为只读文件,修改它时实际上修改的是其他的文件然后再通过update- ...
- python 打印堆栈信息方法
第一种方法使用logging模块 import logging def test(self): try: 1 / 0 # 触发异常 except BaseException as e: logging ...
- java打印堆栈信息
StackTraceElement[] stackElements = new Throwable().getStackTrace(); if(stackElements != null){ for( ...
随机推荐
- Visual Studio 2013 发布正式版及使用感受
(注意:文末我添加了一个小节,用来更新最新的一些使用感受.) 昨天晚上,微软在正式发布Windows 8.1的同时,也同时发布了Visual Studio 2013产品系列的正式版. 版本情况 Vis ...
- Orchard学习 02、orchard 路由
Orchard对mvc路由重新做了包装,重写了asp.net的路由模块 一.路由模块类图 1.路由 Descriptor RouteDescriptor是对常规mvc路由的包装类,它的Route属性就 ...
- 数据库相关--在mac OX10.11.6上安装MySQL
一.之前失败情况 官网下载dmg文件安装.源码安装,下过5.6 5.7 8.0 版本,都可以安装成功,但是在电脑设置界面无法启动,每次点启动输入密码后,均闪一下绿色然后变红色,既然不能界面启动,那 ...
- Python3 多元回归(包含属性的向量化)
# -*- coding: utf-8 -*- """ Created on Thu Jan 4 19:52:03 2018 @author: markli " ...
- liunx的命令大全
- Java日期和时间
目录 Java 日期和时间 Java 日期和时间 学习自 http://blog.csdn.net/zjf280441589/article/details/50447533 Date类 Date 类 ...
- 数据包发包工具bittwist
数据包发包工具bittwist 渗透测试中,通过发送特定格式的包,可以实施网络嗅探和攻击.Kali Linux提供一款发包工具bittwist.该工具可以通过指定的网络接口发送数据.该工具不仅可以 ...
- Xamarin iOS教程之进度条和滚动视图
Xamarin iOS教程之进度条和滚动视图 Xamarin iOS 进度条 进度条可以看到每一项任务现在的状态.例如在下载的应用程序中有进度条,用户可以很方便的看到当前程序下载了多少,还剩下多少.Q ...
- BZOJ.2705.[SDOI2012]Longge的问题(莫比乌斯反演 欧拉函数)
题目链接 \(Description\) 求\[\sum_{i=1}^n\gcd(i,n)\] \(Solution\) \[ \begin{aligned} \sum_{i=1}^n\gcd(i,n ...
- 【LCA】BZOJ1776-[Usaco2010 Hol]cowpol 奶牛政坛
[题目大意] 一棵n个点的树,树上每个点属于一个党派,要求每个党派的最远距离点.两点间距离为两点间边的个数. [思路] yy一下可知,最远距离点中必有一个是该党派深度最深的一个,那么我们就记下最深的点 ...