cocos2dx安卓调试中lua脚本错误报告和记录的解决方案(适用于quick3.5)

本文介绍如何在cocos2dx安卓项目中,通过lua调用c++和jni方法,实现lua脚本错误在安卓应用层面的报告和记录。主要步骤包括lua到c++、c++到java的信息传递,并详细阐述了每个步骤的实现方法,最终达到错误信息的打印和显示。
摘要由CSDN通过智能技术生成


在cocos2dx纯lua脚本逻辑开发中,由于脚本与安卓之间的沟通问题,使得在测试中,脚本错误难以被报告和记录,给测试工作带来了很大的不便。


本文通过lua调用c++方法以及jni的使用,使lua提供的错误信息能够在安卓应用的层面被报告和记录。

主要步骤:

一、信息从lua发送到c++并处理:

1、在项目的c++代码中,编写方法并暴露给lua,使得该方法可以接受来自lua的文本信息并进行处理。

2、在打印错误的方法中,调用c++暴露的接口,传递错误信息并进行处理。

3、如有需要,在发送错误信息的同事暂停游戏。

二、信息从c++发送到java并处理:

1、在项目的java代码中,编写方法,该方法以文本信息为参数并对该信息进行处理。

2、在项目的c++代码中,编写方法,该方法被步骤一中c++代码的方法所调用(或在原方法上处理),该方法使用jni调用java中的方法并将错误信息传递。

三、java对文本进行处理

1、在项目的java代码中,编写方法,被步骤二中的java方法调用(或原方法继续处理),将错误信息打印到文件同时创建对话框显示错误信息。


下面对该解决方案的详细步骤进行介绍:

一、

1、在c++代码的项目目录下,创建一个类LogToAndroid,该类具有一个方法WriteLog,参数是一个字符串,用于被lua调用传入错误信息进行处理。

void  LogToAndroid::WriteLog(string str)
{
	cout<<"receive a log from lua"<<endl;
	cout<<str<<endl;
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
<span style="white-space:pre">	</span>//此处执行步骤二调用jni方法
#else 
	
#endif

}
以上是简单表示的代码,从代码中我们可以看到
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
这个宏,表示当在安卓上进行调试时,执行中间的方法。

然后我们使用tolua工具,将这个类的方法暴露给lua,具体方法可以参考其他教程。

最后得到一个包含int register_all_logtoandroid(lua_State* tolua_S);方法的注册文件,在AppDelegate.cpp中直接或间接地调用这个方法,注册LogToAndroid这个类给lua使用。


2、然后进入到lua脚本,找到main.lua文件,里面有一个__G__TRACKBACK__的函数,这个函数我们可以在cocos引擎的luaStack.cpp中看到它的身影。

大概的作用是,当lua报错给lua引擎时,c++层通过操作lua的stack调用lua中这个方法对错误信息进行打印等处理。这个方法的具体调用路径等我弄明白了再做进一步解释,可能在有些版本中是没有的,那么这个步骤可能需要找到替代方法(具体思路是在lua或者c++中找到打印错误的地方,截获错误信息并调用下一步骤的方法)。

function __G__TRACKBACK__(errorMessage)
    local a = "----------------------------------------".."\n"
    local b = "LUA ERROR: " .. tostring(errorMessage) .. "\n"
    local c = debug.traceback("", 2).."\n"

    print(a..b..c..a)
    LogToAndroid:WriteLog(a..b..c..a)
end
这个方法在quick中的作用是通过print打印错误信息,这里对错误信息进行整理后,又调用了

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值