之前在Windows上一直使用的是VisualStudio的Babelua插件进行调试lua项目的,BabeLua作者的CSDN还是中国人,但是在mac上,就傻眼了,写代码vscode成了首选。
LuaHelper
在vscode中有非常多的lua插件,我中间也尝试了好几个,都感觉不是太理想,最后采用了这腾讯出品的LuaHelper,配套的文档也写了怎么调试lua项目
LuaHelper提供了三个常用的命令,配置项目非常方便。
按照文档我配置完成后,的确是可以正常调试lua项目了,总结下步骤就是:
-
使用
LuaHelper:Copy Debug File复制调试文件LuaPanda.lua到项目的指定位置,推荐是main.lua同级目录。 -
创建
launch.json文件,加入Configurations,使用LuaHelper:Attach配置{ "version": "0.2.0", "configurations": [ { "type": "LuaHelper-Debug", "request": "launch", "name": "LuaHelper-Attach", "description": "通用模式,通常调试项目请选择此模式", "cwd": "${workspaceFolder}", "luaFileExtension": "", "connectionPort": 8818, "stopOnEntry": true, // 会断点在第一行 "useCHook": true, // 使用lua_chook "autoPathMode": true } ] } -
其实经过上边2步已经可以调试lua项目了,只需要我们手动启动游戏即可,我们可以把游戏的可执行程序也配置进来,这样更方便
{ "version": "0.2.0", "configurations": [ { "type": "LuaHelper-Debug", "request": "launch", "name": "LuaHelper-Attach", "program": "游戏的可执行程序路径", "args": [ "-workdir", "游戏的开发目录,就是包含main.lua、sr、res的目录" ], } ] }关于的选项
-workdir,可以修改游戏的实际源码指向,命令行执行细节如下:E:/game/cocos2dx-game.exe -workdir E:/game
实际发现游戏运行有异常,估计是环境变量的问题,懒得查原因了,直接设置
vscode.window.createTerminal的cwd工作目录就正常了。 -
这里有一个小技巧,因为Cocos2d-x是跨平台的,
program在不同的平台生成的可执行程序是不一样的,vscode也支持配置相应平台的program参数,具体的文档里面有说明,只需要在平台下重新定义该属性即可:{ "version": "0.2.0", "configurations": [ { "windows":{ "programe":"./game.exe" }, "osx":{ "program": "./game.app/Contents/MacOS/game" }, "args": [ "-workdir", "游戏的开发目录,就是包含main.lua、sr、res的目录" ], } ] }我提交了一个pr,支持program相对路径
-
我增加了
programWithShutdown选项,可以在关闭调试的时候,顺带着关闭应用程序。
Lua-Plus参考配置
我的增强版本:luahelper-plus是基于LuaHelper的二次开发版本,增加的功能提交给LuaHelper,但是没能及时合并,所以才自己单独发布了一个版本。
{
"version": "0.2.0",
"configurations": [
{
"type": "LuaHelper-Debug",
"request": "launch",
"name": "LuaHelper-Attach",
"description": "通用模式,通常调试项目请选择此模式",
"cwd": "${workspaceFolder}",
"luaFileExtension": "",
"connectionPort": 8818,
"distinguishSameNameFile": true,
"stopOnEntry": false,
"useCHook": true,
"autoPathMode": true,
"program": "E:/game/cocos2dx-game.exe", // 换成你的exe
"programWithShutdown": true
},
]
}
REMOTE DEBUG
- 设置调试服务器的域名端口
require("LuaPanda").setTimeout(0.05).setLogLevel(0).start(外网域名, 端口);
- 打包APP
- 启动vscode的调试服务
- 启动APP,会发起socket链接调试服务器
- 如果一切正常,就可以愉快的调试了
使用小贴士
- 如果无法正常连接调试服务器,可以设置setLogLevel(0),就能看到详细的日志,帮助排查问题。
- LuaPanda的timeout默认0.005,连接公网调试服务器如果时间太短会造成socket链接超时,所以我增加了api,设置我0.05
ios注意事项
ios系统需要开发者自己申请local network能力,然后生成该能力的证书给app使用,才能正常进行局域网remote debug,否则socket连接局域网服务器会报错:no route to host
如果没有权限修改证书,可以考虑使用花生壳等内网穿透,将本地调试服务器映射到公网,客户端链接公网服务器即可。
其他调试插件
lua-debug使用了注入技术,只能调试native,无法remote debug,想要remote debug只能通过socket