Ulua&ToLua 調試


准備工作

調試代碼下載

生成調試配置

這里很多同學出現過一個問題,就是同時下載了很多的lua 調試插件,所以這里需要注意 如果使用luaide進行lua調試,
需要先禁用或卸載其他的lua調試插件.
步驟:

  1. 如果你沒有生成過調試配置 那么先生成

    演示


    演示


    演示


    Ulua&ToLua
  2. 如果你已經有調試配置了可修改/刪除工作目錄下的.vscode/launch.json
  3. 根據調試需要選擇本地或者遠程調試即可

attach 遠程調試 Unity 調試都為遠程調試 不分平台請注意

 {
    "name": "Unity-ulua", "type": "lua", "request": "attach", "runtimeType": "Unity", "localRoot": "${workspaceRoot}", "fileExtname": ".lua", "port": 7003, "printType": 1 }
  1. name:命名調試器選擇項名字
  2. type: 默認配置不需要修改
  3. request:默認配置不需要修改
  4. runtimeType:默認配置不需要修改
  5. localRoot: 與本地調試不同,遠程調試 localRoot 當做scriptMap 一般情況下默認為 ${workspaceRoot} 即可,如果你的代碼目錄是 ${workspaceRoot} 下載的某個路徑 也可明確指定 如 ${workspaceRoot}/scripts
  6. fileExtname:該選項ulua 用默認值就可,如果項目中lua文件后綴不是.lua可修改為具體的后綴來告訴調試器 例如:"fileExtname": ".txt"
  7. port: 調試端口 和 調試代碼中的端口統一即可 無特殊需求
  8. printType: print打印方式
    1. 控制台和系統輸出
    2. 控制台輸出
    3. 系統輸出

調試代碼添加

說明:
下載對應的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 程序異常監聽函數,用於當程序出現異常時調試器定位錯誤代碼 ulua 中為找到合適的位置添加 可忽略該方法不影響調試,如果有可統一添加的位置可告知一下

開啟LuaSocket

ulua 默認關閉了luaSocket 如果項目沒有開啟請自行開啟


LuaManager.cs

打開 Assets/Manager/LuaManager.cs 並添加如下代碼

#region luaide 調試庫添加 //如果項目中沒有luasocket 請打開 [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int LuaOpen_Socket_Core(IntPtr L) { return LuaDLL.luaopen_socket_core(L); } protected void OpenLuaSocket() { LuaConst.openLuaSocket = true; lua.BeginPreLoad(); lua.RegFunction("socket.core", LuaOpen_Socket_Core); lua.EndPreLoad(); } #endregion

並在OpenLibs 方法中調用 OpenLuaSocket()

/// <summary> /// 初始化加載第三方庫 /// </summary> void OpenLibs() { lua.OpenLibs(LuaDLL.luaopen_pb); lua.OpenLibs(LuaDLL.luaopen_sproto_core); lua.OpenLibs(LuaDLL.luaopen_protobuf_c); lua.OpenLibs(LuaDLL.luaopen_lpeg); lua.OpenLibs(LuaDLL.luaopen_bit); //luaide socket 開啟 lua.OpenLibs(LuaDLL.luaopen_socket_core); this.OpenLuaSocket(); //end luaide this.OpenCJson(); }

示例文件:LuaManager.cs

在啟動文件中添加調試代碼

local breakSocketHandle,debugXpCall = require("LuaDebugjit")("localhost",7003) local timer = Timer.New(function() breakSocketHandle() end, 1, -1, false) timer:Start();

示例文件:ULUA_Main.lua

高階用法(查看userdata 的值)

由於采用的是c#語言所以可以利用到反射機制這樣可以通過反射獲取一些c#類型的值顯示在調試器中

  1. 下載 LuaDebugTool.cs 
    將LuaDebugTool.txt 重命名為 LuaDebugTool.cs 后加入到 Assets/Scripts/Utility/ 目錄下

    Paste_Image.png
  1. 打開Editor 項目中的CustomSetting.cs

    Paste_Image.png
  2. 搜索 public static BindType[] customTypeList 所在位置添加如下代碼
    _GT(typeof(LuaDebugTool)),
    _GT(typeof(LuaValueInfo)),

    添加代碼.png
    1. 重新生成warp 這里我采用的是Clear warp files


      Paste_Image.png
    2. 貼一張c# 變量值的圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM