zoukankan      html  css  js  c++  java
  • 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# 变量值的图

  • 相关阅读:
    python笔试题(3)
    跨域资源共享 CORS 详解
    RequestDispatcher接口include方法
    清除浮动的四种方式及其原理理解
    css---vw布局来适应移动端【解决rem的bug】
    golang 实现简单的rsa加密算法
    golang 查找素数
    JAVA大文件上传支持分片上传
    JSP大文件上传支持切割上传
    JSP大文件上传支持分场上传
  • 原文地址:https://www.cnblogs.com/k0204/p/7189474.html
Copyright © 2011-2022 走看看