您现在的位置是:首页 > 正文

unity搭建xlua和emmy_lua的debug环境

2024-02-29 14:41:10阅读 8

配置步骤

1 环境

1.1 vscode 安装emmy_lua

1.2 安装对应的lua版本

1.3 安装java8并配置环境

1.4 emmy_lua的github上下载emmy_lua的64位版本,解压放到工程目录client\Tools\EmmyLua\

下载地址:https://github.com/EmmyLua/EmmyLuaDebugger/releasesicon-default.png?t=M85Bhttps://github.com/EmmyLua/EmmyLuaDebugger/releases

结构如下

client

——Assets

——Tools\EmmyLua

——EasyHook.dll

——emmy_core.dll

——emmy_hook.dll

2 程序启动时执行下面的代码

local function split(line, sep, maxsplit)
    if string.len(line) == 0 then
        return {}
    end
    sep = sep or " "
    maxsplit = maxsplit or 0
    local retval = {}
    local pos = 1
    local step = 0
    while true do
        local from, to = string.find(line, sep, pos, true)
        step = step + 1
        if (maxsplit ~= 0 and step > maxsplit) or not from then
            local item = string.sub(line, pos)
            table.insert(retval, item)
            break
        else
            local item = string.sub(line, pos, from - 1)
            table.insert(retval, item)
            pos = to + 1
        end
    end
    return retval
end

--连接EmmyLua
local function connectEmmyLua()
    local func = function()
        local assets = CS.UnityEngine.Application.dataPath
        local assetDict = split(assets, "/")
        local path = ''
        for i = 1, #assetDict-1 do
            path = path .. assetDict[i] .. '/'
        end
        package.cpath = package.cpath .. ';' .. path .. 'Tools/EmmyLua/emmy_core.dll'
        local dbg = require('emmy_core')
        dbg.tcpConnect('localhost', 9966)
    end
 
    local handle = function(error)
        print('IDE没有开启调试', error)
    end
 
    xpcall(func, handle)
end

3 配置debug使用的launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "emmylua_new",
            "request": "launch",
            "name": "EmmyLua New Debug",
            "host": "localhost",
            "port": 9966,
            "ext": [
                ".lua",
                ".lua.txt",
                ".lua.bytes",
                ".txt"
            ],
            "ideConnectDebugger": false
        },
    ]
}

4 如果是xlua,修改自定义的LuaLoader

这里有个坑,比如lua中require("game.xxx.XX")

在自定义loader中,public byte[] CustomLoader(ref string luaPath)

luaPath则为game.xxx.XX

如果不对这个luaPath做什么,emmylua的断点无法生效,也不会报错,就什么也不发生,简单查阅emmylua插件的源码,没找到关联到lua源码的代码

后来使用breakHere方法,强制进到一个lua断点,但是报错"无法加载源",看不到源码。

local dbg = require('emmy_core')
dbg.tcpConnect('localhost', 8866)
dbg.breakHere()

我猜是不是xlua那边传给emmylua的路径不对呢?

如果想让emmylua断点后可以找到文件需要重新赋值这个luaPath为真实的文件路径

luaPath = GetRealPath(luaPath)

解决问题

5 vscode启动debug

6 设置断点后运行游戏

参考资料

VSCode使用EmmyLua调试Lua代码_HKW_hankangwen的博客-CSDN博客_emmylua vscode

网站文章

  • ExpandRegion for Sublime Text:快速选择文本

    ExpandRegion for Sublime Text:快速选择文本

    有没有特别羡慕WebStorm上的CTRL+W快捷键,通过它可以迅速的选择光标下的文本,多按几次可以逐渐扩大选择的区域,这在编辑文本的时候简直太方便了。Vim也有类似的概念,在Vim中叫文本对象(text object),可以快速选择不同大小的文本对象。 在Sublime Text中虽然也有选择文本的快捷键,但是不够好用,直到有一天遇到这个插件:sublime-expand-regio...

    2024-02-29 14:41:02
  • ftp服务器批量上传文件,bat批量上传ftp文件到服务器

    ftp服务器批量上传文件,bat批量上传ftp文件到服务器

    bat批量上传ftp文件到服务器 内容精选换一换CDM支持周期性自动将新增文件上传到OBS,不需要写代码,也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份。这里以CDM周期性备份FTP...

    2024-02-29 14:40:09
  • SHELL 练习6 2021-11-07

    SHELL 练习6 2021-11-07

    grep正则:1、显示/etc/passwd文件中以bash结尾的行;2、找出/etc/passwd文件中的三位或四位数;3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了...

    2024-02-29 14:39:53
  • 初入Mac的设置及其必备软件(Homebrew + item2) 热门推荐

    初入Mac的设置及其必备软件(Homebrew + item2) 热门推荐

    必装软件之homebrew&item2

    2024-02-29 14:39:11
  • ie-9 以下ajax无法跨域的问题。只要add:jQuery.support.cors=true;即可

    if (!jQuery.support.cors && window.XDomainRequest) { var httpRegEx = /^https?:\/\//i; var getOrPostRegEx = /^get|post$/i; var sameSchemeRegEx = new RegExp('^'+location.pr...

    2024-02-29 14:39:02
  • java newinstance 参数_我可以将Class.newInstance()与构造函数参数一起使用吗?

    假设您具有以下构造函数class MyClass {public MyClass(Long l, String s, int i) {}}您将需要证明打算使用该构造函数,如下所示:Class clas...

    2024-02-29 14:38:55
  • 计算机jsp外文文献,计算机 JSP web 外文翻译 外文文献 英文文献

    计算机 JSP web 外文翻译 外文文献 英文文献外文资料所译外文资料:①作者:Dan Malks②书名:Professional JSP③出版时间: 2000.7.26④所译章节: Chapter...

    2024-02-29 14:38:25
  • 马拉车(Manacher)算法的说明和实现(使用 Java 语言)

    马拉车(Manacher)算法的说明和实现(使用 Java 语言)

    简介了解马拉车算法的作用前,先要知道回文字符串的概念。回文字符串是指无论正着读还是反着读,结果都是一样的字符串。例如 aba、abba 都是回文字符串。马拉车算法就是用来求一个字符串中的最长回文子串。例如 LeetCode 的第五题“最长回文子串”。算法思路马拉车算法的思想和中心扩展算法类似,也是求每个中心点向外扩展得到的最长回文子串长度,所有中心点中最长的回文子串就是要求的结果。但是中...

    2024-02-29 14:38:19
  • vue 相同列合并(复制粘贴可用)

    vue 相同列合并(复制粘贴可用)

    【代码】vue 相同列合并(复制粘贴可用)

    2024-02-29 14:38:11
  • nacos编译的小细节

    nacos编译的小细节

    一、将1.2.0源码的5.0的数据驱动改为8.0的时候1、修改mysql的驱动版本2、可以在这里启动一下3、启动会报错、需要引入包4、先清除、后编译5、如下图说明修改OKdos界面编译的下图所示到此,...

    2024-02-29 14:38:04