ios 远程调试lua脚本,趟坑全过程
最近公司有需求,需要客户端远程调试硬件lua脚本。说干就干
1.获取lua在ios的运行环境
第一步百度,发现网上没有ios客户端调试lua脚本的demo之类的东西,全部是借助第三方工具,这显然不符合我们的需求。但是也不是没有收获发现lua环境其实的源码都是cpp文件。这就很好的和ios兼容了。话不多说先把lua环境下载下来。
http://www.lua.org/ftp/ 官方下载地址
有很多版本,我下载的是的是最新版本。
下载下来后是一个文件夹里面包含cpp文件源码和一个makefile文件。
我们需要的就是src文件夹里面的cpp源码,但是要删除里面的makefile文件和 lua.c , luac.c 三个文件删除
将文件导入工程之后我嗯编译一遍确保不会出现任何编译不通过的情况。
ps.
编译的时候可能会报这个错原因是system方法已经废弃了随意会报错。
解决办法如下:
先导入<ftw.h>头文件
用nftw()函数替换system函数即可
2.下面介绍lua cpp在ios中的用法
2.1首先是导入头文件
我暂时用到这几个
#import "src/lua.h"
#import "src/lauxlib.h"
#import "src/lualib.h"
导入头文件之后就可以用起来了,具体的用法网上很多这里贴个链接我就不赘述了。
https://blog.csdn.net/vimfung/article/details/53788784
3.mobdebug lua远程调试框架
做lua脚本的远程调试基本上是基于此框架来做的。
3.1 下载地址:https://github.com/pkulchenko/MobDebug
下载下来我们需要用到的文件大概就是这三个,其中mobdebug是整个框架的源文件。
3.2 将mobdebug.lua文件加入工程,我这边是直接丢到沙盒的doucments文件夹里面的
然后将server.lua文件也加入工程(可以跟mobdebug.lua文件放在一起,这里有个很大的坑后面会提到)
server.lua文件其实就是一个监听程序的路口,里面就一句代码'require("mobdebug").listen("*",8172)"
require函数就是包含一个mobdebug.lua的脚本获取mobdebug模块再调用它的listen函数,监听一个端口。
这里在ios里面有一个很大的坑,就是require函数的搜索模块的路径在ios里面不能使用相对路径,而ios编译成功之
后的文件路径每次都是不一样的所以导致。不能require到mobdebug模块。
解决办法:
在ios编译完成之后动态的想server.lua文件内写入代码修改package.path的指(package.path的值是require函数的指定搜索路径)因为编译完成之后是可以拿到沙盒路径的。
3.3导入luasocket.lua 框架
要做远程调试少不了socket,而且mobdebug也是依赖luasocket.lua框架的。先导入luasocket.lua cpp环境
下载地址:http://files.luaforge.net/releases/luasocket/luasocket/luasocket-2.0.2
同样将src导入工程,将makefile文件删除,将.lua文件拿出来后面会用到。
3.4将luasocke环境和lua环境在ios下关联起来需要修改一个配置文件linit.c文件
3.5 在ios客户端调用lua的dofile方法将沙盒里面server.lua文件的地址传过去,执行server.lua脚本。完成对端口有的监听
ps 还有一个问题就是mobdebug require("socket") 跟之前一样这种写法在ios里面是找不到的socket.lua的。还是要动态的修改mobdebug中package.path的值。我的做法是修改mobdebug.listen()函数,多穿了一个参数进去把沙盒的绝对路径传进去了。