unity搭建xlua和emmy_lua的debug环境

news2025/7/22 9:32:19

配置步骤

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「Redis数据结构」动态字符串(SDS)

「Redis数据结构」动态字符串(SDS) 文章目录「Redis数据结构」动态字符串(SDS)[toc]一、前言二、概述三、C字符串与SDS的区别获取字符串长度复杂度杜绝缓冲区溢出减少修改字符串时的内存分配次数二进制安全兼容部分C字符串函数参考…

【PyTorch】Transforms基本使用

文章目录二、Transforms基本使用1、Transforms的结构及用法1.1 如何使用1.2 TensorBoard查看2、常用的Transforms2.1 ToTensor2.2 Normalize2.3 Resize2.4 Compose2.5 RandomCrop二、Transforms基本使用 Transforms主要是对特定格式的图片进行一些变化。 1、Transforms的结构及…

展锐UIS8310 CAT4物联网模块简介

1.简介 UIS8310是一个高度集成的应用处理器,支持TDD-LTE、FDD-LTE和WCDMA、GSM/GPRS/EDGE制式,并且支持LPDDR2。它的AP处理器是单核ARM CortexTM A7 1GHz,旨在为物联网提供经济高效、低功耗和高性能的解决方案。 UIS8310经过特别优化的架构可…

Servlet之RequestReponse 学习笔记

1 Request 1.1 Request继承关系 ServletRequest Java提供的请求对象根接口 HttpServletRequest Java提供的对Http协议封装的请求对象接口 RequestFacade Tomcat定义的实现类WebServlet("/demo2") public class Servlet2Demo extends HttpServlet {Overridep…

Vue 路由router的介绍以及使用方法

路由:简单来说类似于路由器,中转站。 1.理解: 一个路由(route)就是一组映射关系(key - value),多个路由需要路由器(router)进行管理。 2.前端路由:key是路径&…

同源策略、跨域与JSONP

跨域与JSONP一、了解同源策略和跨域1.1 同源策略1.2 跨域二、JSONP2.1 什么是JSONP2.2 JSONP的实现原理2.3 自己实现一个简单的JSONP2.4 JSONP的缺点2.5 jQuery中的JSONP2.6 自定义参数及回调函数名称2.7 jQuery中JSONP的实现过程三、案例-淘宝搜索一、了解同源策略和跨域 1.1…

软考考完了,如何评职称?

很多考生以为软考初级、中级、高级资格考试通过了就是相应的职称了,然而并不是这样的,通过了软考考试只是相当于有了评职称的资格,并不是有了相应职称。 有了软考证书是可以申请评职称的,因为有了软考证书就有了评职称的资格哦&a…

【前端】flet:一款(即将)支持多语言开发的UI库

文章目录介绍开发生态支持语言运行体验组件API热更新开发计划 Roadmap2022 7月-8月安全手机端桌面端Controls(控件)核心功能用户指引(User education)2022 9月到12月手机端控件(Controls)编程语言支持核心功能介绍 Flet enables …

【云原生 | Kubernetes 系列】--Gitops持续交付 CD Push Pipeline实现

1. Tekton Trigger基础 Tekton Triggers简介 - 监控特定的事件,并在满足条件时自动触发Tekton PipelineTekton Triggers 为用户提供了一种声明式API 它允许用户按需定义监视的事件,并将其与特定的Pipeline连接,从而实例化出PipelineRun还允许将事件中的某些属性值信息注入到P…

使用springboot每日推送早安问候语到用户微信

本文主要实现给不同的用户推动不同的问候模板 准备工作 申请微信公众平台的测试号 申请微信测试公众号 创建成功后,可以看到appid和appsecret,这个后面认证时需要 申请模板 可自行修改 今天是:{{now.DATA}} 不管那一天,每一天…

【科学文献计量】科学文献知识网络分析基础

科学文献知识网络分析基础 1 知识网络分析基础2 知识网络图构成2.1 简单网络图绘制2.2 完整网络图绘制3 知识网络图中的术语3.1 术语和统计量概念3.2 获取术语信息实例3.3 最大子群和网络图孤立点的识别3.4 网络图节点度信息的统计1 知识网络分析基础 从分析的角度来看,社会网…

安保公司的商业计划书

安保公司的商业计划书年轻人,来做保安吧,少走二十年弯路安保公司的商业计划书安保品牌公司的商业模式真正的路反潮流,不上大学去创业,其实反而是领先的。 工厂肯定不能创业的,因为打工的技能和创业的技能不同。 如果…

【附源码】计算机毕业设计JAVA茶园文化交流平台演示录像2020

【附源码】计算机毕业设计JAVA茶园文化交流平台演示录像2020 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&#xff1…

SpringBoot框架Mockito的使用

SpringBoot框架Mockito的使用 一、简介 mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 在具体的测试过程中,我们经常会碰到需要模拟数据或者接口的情况,因为环…

线性模型(穷举法实现)

参考视频:2.线性模型_哔哩哔哩_bilibili 参考视频中实现ywxywxywx 的代码,在加上偏置b后实现 ywxbywxbywxb 的线性模型 假设我们有这样一个线性模型:ywxbywxbywxb X和Y对应的数据如下 XY1.05.02.08.03.011.04.0? 预测值&#x…

开源知识付费APP代码分析

如今,传统的学校已经不能满足大众多元化的需求,各种教育培训机构落地生根。随着时间的推移,互联网与传统教育的结合也开拓了一种新的教育方式,这就是广为人知的知识付费。在线教育的突然崛起多半是因为疫情的“催化”,…

OceanBase 4.0 - 从分布式到单机,从单机到分布式

近些年国产化数据库如雨后春笋般冒出并遍地开花。据某技术平台不完全统计,国产化数据库(见图 )已达 200余个,对于这些数据库的名字,即使作为多年数据库从业者的我,也有很多是第一次听说。在这竞争激烈的数据…

FFplay文档解读-49-多媒体过滤器三

32.14 sendcmd, asendcmd 将命令发送到filtergraph中的过滤器。 这些过滤器读取要发送到filtergraph中其他过滤器的命令。 必须在两个视频滤镜之间插入sendcmd,必须在两个音频滤镜之间插入asendcmd,但除此之外,它们的行为方式相同。 可以…

[附源码]java毕业设计基于的高校学生考勤管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

vue中tinymce的使用

1.下载 npm i tinymce5.10.3 tinymce/tinymce-vue3.2.8 -S2.在node_modules中找到 (我这里是vue2,vue3不是写在public下,具体的可以搜搜 看看) 3.在public中新建 tinymce 文件夹 把三个文件复制进去 4.在components文件夹中新建…