在VsCode上调试Cocos2d-x lua项目

1,762 阅读2分钟

之前在Windows上一直使用的是VisualStudio的Babelua插件进行调试lua项目的,BabeLua作者的CSDN还是中国人,但是在mac上,就傻眼了,写代码vscode成了首选。

LuaHelper

在vscode中有非常多的lua插件,我中间也尝试了好几个,都感觉不是太理想,最后采用了这腾讯出品的LuaHelper,配套的文档也写了怎么调试lua项目

LuaHelper提供了三个常用的命令,配置项目非常方便。

image.png

按照文档我配置完成后,的确是可以正常调试lua项目了,总结下步骤就是:

  1. 使用LuaHelper:Copy Debug File复制调试文件LuaPanda.lua到项目的指定位置,推荐是main.lua同级目录。

  2. 创建launch.json文件,加入Configurations,使用LuaHelper:Attach配置 image.png

    {
        "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
            }
        ]
    }
    
  3. 其实经过上边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工作目录就正常了。

  4. 这里有一个小技巧,因为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相对路径

  5. 我增加了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

  1. 设置调试服务器的域名端口
require("LuaPanda").setTimeout(0.05).setLogLevel(0).start(外网域名, 端口);
  1. 打包APP
  2. 启动vscode的调试服务
  3. 启动APP,会发起socket链接调试服务器
  4. 如果一切正常,就可以愉快的调试了

使用小贴士

  • 如果无法正常连接调试服务器,可以设置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