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

时间:2023-12-31 19:32:02

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

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文件写
法见下面)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. Lua 为什么自己添加的代码没有代码提示?
答: 1.0.0 beta 版本同文件的代码可以提示,不同文件如果在同目录也可以提示,但时如果另外的文件在子目录下就不能提示了,这是个bug,在1.0.1 beta之后解决了

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

[参考资料]