Vs code断点调试Cocos Lua

时间:2022-10-17 14:26:54

 

windows平台下使用cocos 3.10新建Lua项目,使用Visual Studio Code(简称Vs Code)进行调试的话,其配置如下:

1. 安装luaide,在扩展里面搜索luaide

Vs code断点调试Cocos Lua

2. 设置,将项目中src目录放置到vscode中,选择LuaDebug, 这时就会出现launch.json文件

Vs code断点调试Cocos Lua

找到exePath字段,替换为你需要执行的.exe的路径,比如:

原:
"exePath": "/Users/k0204/Desktop/quickv3/quickv3 Mac.app/Contents/MacOS/quickv3 Mac",
新:
"exePath": "G:/GitHub/GameBox/Project/simulator/win32/Project.exe",

其它默认即可。

3. 断点调试配置

需要LuaDebug.lua,其官网下载:https://github.com/k0204/LuaIde

下载成功后,将../LuaIde/luadebug下的LuaDebug.lua文件放置到你的项目src目录下,然后在项目的main.lua中添加如下代码:

-- 此处的7003要与lauch.json中的port一致即可,其端口在本地没有什么要求
local breakInfoFun,xpcallFun = require("LuaDebug")("localhost", 7003)

-- cocos3.x
-- 1.断点定时器添加
cc.Director:getInstance():getScheduler():scheduleScriptFunc(breakInfoFun, 0.3, false)
-- 2.程序异常监听
__G__TRACKBACK__ = function(errorMessage)
    xpcallFun();
    print("----------------------------------------")
    local msg = debug.traceback(errorMessage, 3)
    print(msg)
    print("----------------------------------------")
end
local status, msg = xpcall(main, __G__TRACKBACK__ )

可参考:https://github.com/k0204/LuaIde/wiki

 4. F5启动调试

启动代码后,会提示类似如下的错误:

[LUA ERROR] USE "cc.exports.print1" = value "INSTEAD OF SET GLOBAL VARIABLE"
or 
cc.exports.StartDebug ...

这是由于在代码的config.lua中,添加了对全局变量的判定:

-- disable create unexpected global variable
CC_DISABLE_GLOBAL = true        -- 设为false

在不熟悉LuaDebug.lua代码的情况下,不建议将未声明的全局变量或者方法修改为局部,否则很容易导致添加断点无效的问题,切记!

5. Simulator console窗口

运行项目后,倘若想显示Simulator consolue窗口的话,可修改:

// SimulatorWin.cpp
// define 1 to open console ui and setup windows system menu, 0 to disable 
// 由0设置为1
#define SIMULATOR_WITH_CONSOLE_AND_MENU 1

 

 7. 注意:

新建的cocosLua项目,如果将项目目录下的src放置到Vs Code中,在运行的时候,尤其是需要加载res下的资源文件时,会导致加载失败,其原因在于:

-- 获取搜索路径
local searchpaths = cc.FileUtils:getInstance():getSearchPaths()
print(searchpaths)

-- 其搜搜路径根本就没有设定 ProjectDir/res 相关,且即使设定了搜索了路径也是无效的
-- 除非你将导入vscode下的src目录切换为simulator/win32/src目录,但是这样又会导致一个问题,就是你修改的代码与ProjectDir/src下会不同步

所有比较稳妥的方式是使用 cocos BabeLua