對於一種語言,其所謂開發調試環境, 大體有以下兩方面的內容:
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文件寫
法見下面)

2. Lua 為什么自己添加的代碼沒有代碼提示?
答: 1.0.0 beta 版本同文件的代碼可以提示,不同文件如果在同目錄也可以提示,但時如果另外的文件在子目錄下就不能提示了,這是個bug,在1.0.1 beta之后解決了
ps:筆者親自測試,1.1.0版本仍然存在這個問題。不過Sublime Text 2 + 插件的模式(QuickXDev)較好的解決了這個問題。
