Vs code斷點調試Cocos Lua

使用cocos 3.10新建Lua項目,命名爲Project,其項目目錄如下:

文件主要目錄:

  res: cocos的資源目錄

  src: cocos lua的腳本目錄

使用Visual Studio Code進行編譯開發,其安裝地址爲:https://code.visualstudio.com/

 

 關於lua的編寫檢測與添加斷點調試,其步驟如下:

1. 安裝luaide,在擴展裏面搜索luaide(推薦使用最新版本)

2. 設置,將項目中src目錄放置到vscode中,點擊F5啓動調試,會提示配置相關,選擇LuaDebug, 這時就會出現launch.json文件

在launch.json中,我們針對於本地調試修改如下配置:

{
    "name": "Cocos2-Window",
    "type": "lua",
    "request": "launch",
    "runtimeTypesc": "運行時類型,支持:Lua51, Cocos2, Cocos3, Unity",
    "runtimeType": "Cocos2",
    "localRootDesc": "--必填 當前文件夾目錄 填寫錯誤容易導致res或者src獲取不到文件的問題",
    "localRoot": "${workspaceRoot}/../",
    "mainFileDesc": "-- 先填 啓動的lua文件名 運行程序支持workdir當做file進行傳入 window與mac 填寫方式不一致",
    "mainFile": "src/main.lua",
    "portDesc": "--必填 調試器的端口 可修改 與調用LuaDebug/LuaDebugjit的端口對應",
    "port": 7003,
    "exePathDesc1": "--必填 執行文件路徑",
    "exePathDesc2": "--必填 win-> ",
    "exePathDesc3": "--必填 mac ->運行程序,選擇app右鍵->顯示包內容 -> Contents/MacOS/AppName 不需要添加後綴名",
    "exePath": "${workspaceRoot}/../simulator/win32/Project.exe",
    "printTypeDesc": "--必填 print打印方式 1 控制檯和系統輸出,2 控制檯輸出,3 系統輸出",
    "printType": 1,
},
{
    "name": "Cocos2-Mac",
    "type": "lua",
    "request": "launch",
    "runtimeType": "Cocos3",
    "localRoot": "${workspaceRoot}",
    "commandLine": "-workdir ${workspaceRoot}/../ -file src/main.lua",
    "port": 7003,
    "exePath": "${workspaceRoot}/../runtime/mac/Project-desktop.app/Contents/MacOS/Project-desktop",
   "printType": 1,
},

其主要配置參數說明:

name: 命名調試器的名字,比如Cocos3_Windows, Cocos3_Mac等
type: 配置類型,不需要修改
request: 請求配置類型
runtimeType: 運行時類型,不需要修改支持:Lua51, Cocos2, Cocos3, Unity
localRoot: 調試文件夾目錄
manFile: 啓動的lua文件名
commandLine: 刪除了原有的mainFile配置,可直接填寫命令參數,其相關的配置有:
  -workdir: 設置項目目錄,
  -file: 設置啓動腳本
  -writable: 設置device.writablePath對應的路徑,未指定時,爲項目目錄
  -package.path: 設置附加的lua模塊加載路徑
  -size: 設置模擬器的屏幕尺寸,格式爲: 寬度x高度
  -scale: 設置模擬器的縮放比例:範圍在0.1~1.0之間
  -write-debug-log: 將調試信息寫入debug.log文件,該文件存放於項目目錄中
  -disable-wrte-debug-log: 禁止寫入調試信息到debug.log中
  -console: 顯示調試信息控制檯窗口
  -disable-console: 禁止調試信息控制檯窗口
  -offset: 啓動時模擬器窗口的偏移位置,格式:{xoffset, yoffset}

port: 調試端口,和調試代碼中的端口一致即可。如果有多個VsCode工程,建議端口雙方的端口不一致,否則調試無效
exePath: 執行文件路徑,注意:
    在widnows中,可填入其exe的完整路徑
    在mac中可找到對應的desktop app項目,然後右鍵->顯示包內容->Contents/MacOS/AppName, 可不添加其後綴
print: print打印方式:1 控制檯和系統輸出 2 控制檯輸出 3 系統輸出

 

3. 斷點調試配置

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

下載成功後,將../LuaIde/luadebug下的LuaDebug.lua,LuaDebugjit.lua文件放置到你的項目src目錄下,然後在項目的main.lua中添加如下代碼:

-- 設置加載圖像失敗時是否彈出消息框
cc.FileUtils:getInstance():setPopupNotify(false)

-- 添加搜索路徑,爲了避免運行時獲取不到目錄文件,將其置頂
local writePath = cc.FileUtils:getInstance():getWritablePath()
local resSearchPaths = {
    writePath,
    writePath .. "lua_classes/",
    writePath .. "src/",
    writePath .. "res/",
    "lua_classes/",
    "src/",
    "res/",
}
cc.FileUtils:getInstance():setSearchPaths(resSearchPaths)

require "config"
require "cocos.init"

local function main()
    require("app.MyApp"):create():run()
end

-- 添加ludIde調試代碼,GitHub: https://github.com/k0204/LuaIde
-- 在cocos2.x中使用LuaDebug;在cocos3.x中使用LuaDebugjit
-- breakInfoFunc: 斷點及時刷新函數,需要在定時器中調用,該函數用於確保斷點能夠及時的發送到lua client
-- xpcallFun: 程序異常監聽函數,用於當程序出現異常時調試器定位錯誤代碼
-- 7003在lauch.json中的port端口中配置,一致即可
local breakInfoFun,xpcallFun = require("LuaDebugjit")("localhost", 7003)
-- 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__)
if not status then
    print(msg)
end

 

 

 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代碼的情況下,不建議將未聲明的全局變量或者方法修改爲局部,否則很容易導致添加斷點無效的問題

 

6. 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. 其他

若在使用Visual Studio的情況下,想調試lua,可查看如下文檔:cocos BabeLua

 

參考資料:

LuaIde: https://github.com/k0204/LuaIde

LuaIde Wiki: https://github.com/k0204/LuaIde/wiki

cocos3.x調試: https://www.showdoc.cc/luaide?page_id=713832708344106

commandLine命令參考: https://www.showdoc.cc/luaide?page_id=713877806710429

Visual Studio Code命令參考: https://code.visualstudio.com/docs/editor/variables-reference#_environment-variables

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章