准備工作
生成調試配置
這里很多同學出現過一個問題,就是同時下載了很多的lua 調試插件,所以這里需要注意 如果使用luaide進行lua調試,
需要先禁用或卸載其他的lua調試插件.
步驟:
- 如果你沒有生成過調試配置 那么先生成
演示
演示
演示
演示 - 如果你已經有調試配置了可修改/刪除工作目錄下的
.vscode/launch.json
- 根據調試需要選擇本地或者遠程調試即可
參數說明
參數說明:
launch 本地調試
{
"name": "Cocos2-launch", "type": "lua", "request": "launch", "runtimeType": "Cocos2", "localRoot": "${workspaceRoot}", "mainFile": "scripts/main.lua", "port": 7003, "exePath": "E:\\editor\\quick-2.2.6\\player\\win\\player.exe", "printType": 1 }
- name:命名調試器選擇項名字
演示 - type: 默認配置不需要修改
- request:默認配置不需要修改
- runtimeType:默認配置不需要修改
-
localRoot: 等同於 cocos 中的 workdir 用來告訴cocos運行程序,工作目錄是哪一個 提供兩種方式
-
${workspaceRoot} 的相對路徑
-
如果你直接拖入vscode的就是 工作目錄那么 直接填寫 ${workspaceRoot}
演示 -
如果你拖入的只是工作目錄中的一個文件夾 那么通過/.. 對於的層級進行設置
演示.png
-
- 填寫絕度路徑(不推薦)
-
演示.png
-
-
- mainFile:啟動的lua 文件 該配置和 localRoot 配合使用 以localRoot為根目錄 進行相對路徑填寫
- 例1: 啟動文件在 localRoot 的
src
目錄名字為main.lua
-->src/main.lua
- 例2: 啟動文件在 localRoot 的
scripts
目錄下文件名為game.lua
-->scripts/game.lua
- 例1: 啟動文件在 localRoot 的
- port: 調試端口 和 調試代碼中的端口統一即可 無特殊需求
- exePath:執行的exe文件路徑 例如:E:/cocos/player/player.exe
- printType: print打印方式
- 控制台和系統輸出
- 控制台輸出
- 系統輸出
attach 遠程調試
{
"name": "COCOS(remote debugging)", "type": "lua", "request": "attach", "runtimeType": "Cocos2", "localRoot": "${workspaceRoot}", "port": 7003, "printType": 1 },
- name:命名調試器選擇項名字 同上
- type: 默認配置不需要修改
- request:默認配置不需要修改
- runtimeType:默認配置不需要修改
- localRoot: 與本地調試不同,遠程調試 localRoot 當做scriptMap 一般情況下默認為 ${workspaceRoot} 即可,如果你的代碼目錄是 ${workspaceRoot} 下載的某個路徑 也可明確指定 如 ${workspaceRoot}/scripts
- port: 調試端口 和 調試代碼中的端口統一即可 無特殊需求
- printType: print打印方式
- 控制台和系統輸出
- 控制台輸出
- 系統輸出
調試代碼添加
說明:
下載對應的LuaDebug 或 LuaDebugjit 后放入腳本目錄中
local breakSocketHandle,debugXpCall = require("LuaDebugjit")("192.168.1.102",7003) local breakSocketHandle,debugXpCall = require("LuaDebugjit")("localhost",7003) 1. IP地址當本機調試時可使用localhost遠程調試或移動設備端調試是需要輸入調試器所在機器具體的ip 2. port 端口 LuaIde 默認配置中端口為7003 如有需要可執行更改確保調試器配置端口和調用 代碼的端口統一即可 3. breakSocketHandle luaIde斷點及時刷新函數,需要在定時器中調用 該函數確保斷點能夠及時的 發送到lua 客戶端 4. debugXpCall 程序異常監聽函數,用於當程序出現異常時調試器定位錯誤代碼
cocos2.x
local breakSocketHandle,debugXpCall = require("LuaDebug")("localhost",7003) CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(breakSocketHandle ,0.3,false) --如果已經存在 __G__TRACKBACK__ 請將 debugXpCall 直接加入 __G__TRACKBACK__ 即可 --__G__TRACKBACK__ 方法不是必須 debugXpCall是實現的是在lua 腳本調用錯誤時進行代碼錯誤定位 function __G__TRACKBACK__(errorMessage) debugXpCall(); end local status, msg = xpcall(main, __G__TRACKBACK__)
示例文件:cocos2x_main.lua
cocos3.x
local breakSocketHandle,debugXpCall = require("LuaDebug")("localhost",7003) cc.Director:getInstance():getScheduler():scheduleScriptFunc(breakSocketHandle, 0.3, false) --如果已經存在 __G__TRACKBACK__ 請將 debugXpCall 直接加入 __G__TRACKBACK__ 即可 --__G__TRACKBACK__ 方法不是必須 debugXpCall是實現的是在lua 腳本調用錯誤時進行代碼錯誤定位 function __G__TRACKBACK__(errorMessage) debugXpCall(); end local status, msg = xpcall(main, __G__TRACKBACK__)
示例文件:cocos3x_main.lua