在cocos code ide的基础上构建自己的lua开发调试环境

  对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容:

1、开发, 即代码编写, 主要是代码提示、补齐, 更高级一点的如变量名颜色等。

2、调试, 主要是运行状态下断点、查看变量、堆栈等。

  现在无论是端游还是手游(基于cocos2d)的开发, 基本模式都是c++内核 + lua逻辑的路线。对于c++的开发和调试, vs已经能很好的满足开发者的需求, 微软这方面真是值得称颂。不幸的是, lua的开发和调试,还没有一个统一的,方便的开发调试环境,这也给广大的luaer和项目造成了极大的困扰。目前通常的做法大致有如下几种:

1、纯粹意义上的lua编辑器, 如Sublime Text 2 + 插件的模式(QuickXDev),解决了代码提示和补齐问题。

2、编辑器的基础上加入调试功能, 通常是直接在vs上开发一个相应插件(如 babe lua), 或者是一个独立的第三方程序(如decoda、lua studio)。

  这些方案基本上都存在lua调试不方便, 没有一个统一的规则来定制自己的lua api的问题, 因此如何构建一个好的lua开发调试环境对于项目极为重要。

  笔者因为对于代码提示、补齐、如何调试lua、插件开发的原理不懂, 并且也没有精力去研究这方面的内容, 想到了一个偷懒的办法, 也是考虑到目前cocos2d发展的良好趋势, 何不直接利用cocos2d环境下lua的开发方式来构造一套自己的lua开发和调试环境。

[cocos code ide调试原理]

  在cocos2d环境下, 开发者通常会利用cocos code ide进行lua的代码编写和调试。cocos code ide是基于eclipse的(eclipse真是强大啊, 可以根据需要进行任意定制, 包括adobe的flash builder也是基于这套环境), 较好的解决了lua代码的编辑问题, 如提示、补齐等。如果要调试lua代码的话, 则需要指定一个可以称之为第三方exe的独立程序, 其实就是一个c++内核程序, 也就是lua的宿主程序, 用于解释执行lua代码。至于这个宿主程序, 你可以使用cocos2d预先提供的PrebuiltRuntimeLua.exe,也可以利用cocos2d提供的模板来构建自己独特的宿主程序。这个宿主程序是如何和cocos code ide进行交互呢(这里交互指的是可以在vs下调试宿主程序的c++代码, 在cocos code ide里调试lua), 笔者简单的跟踪了一下宿主程序的运行, 无论是本地调试还是远程调试, 大概原理和流程如下:

1、宿主程序启动, 显示等待窗口, 并开启socket监听(这个是不是很赞, 意味着可以远程调试)等待cocos code ide进行连接和指令。

2、cocos code ide启动, 连接socket, 发送指令到宿主程序。

3、宿主程序分析指令, 如果是sendrequest这条指令,则执行一个lua入口脚本(src\main.lua,可以在程序里定制), c++和lua的眉来眼去就正式开始鸟。

  至于cocos code ide是如何在eclipse的基础上实现lua代码编辑相关和调试相关的功能, 笔者不懂, 也基本上不会花时间去研究。笔者要做的是在以上分析的原理基础上, 在cocos code ide的基础上定制自己的lua开发调试环境。

[基于cocos code ide的lua开发调试方案]

  本方案的优势是建立在一个较好的基础上, 可以比较方便快速的实现。由于cocos2d发展的良好趋势和广泛的应用, 相信cocos2d开发小组, 会不断加强并完善cocos code ide的功能。因此,可以说是一个相对强大的团队在背后支持这套方案。

  那么如何实现这个方案呢, 笔者认为主要有以下几个问题需要解决:

1、如何让cocos code ide认可定制的宿主程序。

2、如何定义自己的lua api让cocos code ide可以识别。

[定制宿主程序]

  这个可以参考一个用cocos2d的模块创建的lua项目对应的runtime工程, 或者quick cocos中的player工程。

  基本步骤可以参考如下过程:

1、用cocos code ide新建一个lua工程。要注意的是工程名要和所在的文件夹名一致, 否则cocos code ide不能调试。

[定义自己的lua api]

这个问题又可以细分为两个方面:

1、lua脚本中的api

  这个cocos code ide本身已经支持, 只要是ide可以检索到的lua脚本, ide就可以识别出里面定义的api。[见参考资料转载2]

2、c++注册到lua中的api

  这个可以参考cocos code ide是如何识别出lua库,cocos2d库,quick cocos库中的api。[见参考资料转载1]

[补充和愿景]

1、lua的调试原理。

2、vs插件的开发原理(如何直接在vs环境下实现lua开发调试)。

3、eclipse中如何实现某种语言的代码编辑功能和调试功能。

4、Lua Development Tools,LDT,一个基于eclipse的l开源的ua开发调试环境, 笔者强烈怀疑cocos code ide是以这个工具为基础改写的。

5、microsoft或许有一天会将lua视作c++指定的官方脚本, 直接在vs中集成lua的开发调试功能, 那可真是广大luaer的福音。

[参考资料转载]

1. lua binding 导出的自定义类怎么加到ide的代码提示?

答: IDE 1.0.1 beta开始支持lua binding导出的代码支持代码提示,需要通过指定项目的Lua

User Libraries方式导入。

lua binding导出的自定义类,需要压缩成zip格式,然后按如下步骤导入项目中。(global文件写

法见下面)

外的文件在子目录下就不能提示了,这是个bug,在1.0.1 beta之后解决了

ps:笔者亲自测试,1.1.0版本仍然存在这个问题。不过Sublime Text 2 + 插件的模式(QuickXDev)较好的解决了这个问题。

[参考资料]