準備工作
調(diào)試示例下載
生成調(diào)試配置
這里很多同學出現(xiàn)過一個問題,就是同時下載了很多的lua 調(diào)試插件,所以這里需要注意 如果使用luaide進行l(wèi)ua調(diào)試,
需要先禁用或卸載其他的lua調(diào)試插件.
步驟:
-
如果你沒有生成過調(diào)試配置 那么先生成
- 如果你已經(jīng)有調(diào)試配置了可修改/刪除工作目錄下的
.vscode/launch.json
- 根據(jù)調(diào)試需要選擇本地或者遠程調(diào)試即可
參數(shù)說明
參數(shù)說明:
launch 本地調(diào)試
{
"name": "Cocos2-launch",
"type": "lua",
"request": "launch",
"runtimeType": "Cocos2",
"localRoot": "${workspaceRoot}",
"commandLine": "-workdir ${workspaceRoot} -file src/main.lua",
"port": 7003,
"exePath": "E:\\editor\\quick-2.2.6\\player\\win\\player.exe",
"printType": 1
}
-
name:命名調(diào)試器選擇項名字
type: 默認配置不需要修改
request:默認配置不需要修改
runtimeType:默認配置不需要修改
localRoot: 調(diào)試腳本目錄,用于調(diào)試器查找對應的lua文件
commandLine: 刪除原有的mainFile 配置 改為直接填寫 命令參數(shù)
如果打開的文件夾為 src/scripts 目錄 那么參數(shù)應該寫為
"commandLine": "-workdir ${workspaceRoot}/../ -file src/test1.lua",port: 調(diào)試端口 和 調(diào)試代碼中的端口統(tǒng)一即可 無特殊需求
exePath:執(zhí)行的exe文件路徑 例如:E:/cocos/player/player.exe
-
printType: print打印方式
- 控制臺和系統(tǒng)輸出
- 控制臺輸出
- 系統(tǒng)輸出
attach 遠程調(diào)試
{
"name": "COCOS(remote debugging)",
"type": "lua",
"request": "attach",
"runtimeType": "Cocos2",
"localRoot": "${workspaceRoot}",
"port": 7003,
"printType": 1
},
- name:命名調(diào)試器選擇項名字 同上
- type: 默認配置不需要修改
- request:默認配置不需要修改
- runtimeType:默認配置不需要修改
- localRoot: 與本地調(diào)試不同,遠程調(diào)試 localRoot 當做scriptMap 一般情況下默認為 ${workspaceRoot} 即可,如果你的代碼目錄是 ${workspaceRoot} 下載的某個路徑 也可明確指定 如 ${workspaceRoot}/scripts
- port: 調(diào)試端口 和 調(diào)試代碼中的端口統(tǒng)一即可 無特殊需求
-
printType: print打印方式
- 控制臺和系統(tǒng)輸出
- 控制臺輸出
- 系統(tǒng)輸出
調(diào)試代碼添加
說明:
下載對應的LuaDebug 或 LuaDebugjit 后放入腳本目錄中
local breakSocketHandle,debugXpCall = require("LuaDebugjit")("192.168.1.102",7003)
local breakSocketHandle,debugXpCall = require("LuaDebugjit")("localhost",7003)
1. IP地址當本機調(diào)試時可使用localhost遠程調(diào)試或移動設備端調(diào)試是需要輸入調(diào)試器所在機器具體的ip
2. port 端口 LuaIde 默認配置中端口為7003 如有需要可執(zhí)行更改確保調(diào)試器配置端口和調(diào)用
代碼的端口統(tǒng)一即可
3. breakSocketHandle luaIde斷點及時刷新函數(shù),需要在定時器中調(diào)用 該函數(shù)確保斷點能夠及時的
發(fā)送到lua 客戶端
4. debugXpCall 程序異常監(jiān)聽函數(shù),用于當程序出現(xiàn)異常時調(diào)試器定位錯誤代碼
cocos2.x
local breakSocketHandle,debugXpCall = require("LuaDebug")("localhost",7003)
CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(breakSocketHandle ,0.3,false)
--如果已經(jīng)存在 __G__TRACKBACK__ 請將 debugXpCall 直接加入 __G__TRACKBACK__ 即可
--__G__TRACKBACK__ 方法不是必須 debugXpCall是實現(xiàn)的是在lua 腳本調(diào)用錯誤時進行代碼錯誤定位
function __G__TRACKBACK__(errorMessage)
debugXpCall();
end
local status, msg = xpcall(main, __G__TRACKBACK__)
示例文件:cocos2x_main.lua
cocos3.x
注意:由于cocos3.x 較高版本對全局變量進行了限制 所以 調(diào)試代碼需要添加在 require "cocos.init" 之前如下圖:
2018_5_13:更新 有些版本由于設置問題不能找到 src 目錄 可將 cc.FileUtils.getInstance():addSearchPath("src/") 放在調(diào)試文件上方
如下圖:
local breakSocketHandle,debugXpCall = require("LuaDebugjit")("localhost",7003)
cc.Director:getInstance():getScheduler():scheduleScriptFunc(breakSocketHandle, 0.3, false)
--如果已經(jīng)存在 __G__TRACKBACK__ 請將 debugXpCall 直接加入 __G__TRACKBACK__ 即可
--__G__TRACKBACK__ 方法不是必須 debugXpCall是實現(xiàn)的是在lua 腳本調(diào)用錯誤時進行代碼錯誤定位
function __G__TRACKBACK__(errorMessage)
debugXpCall();
end
local status, msg = xpcall(main, __G__TRACKBACK__)
示例文件:cocos3x_main.lua