使用Xlua热更新框架进行Unity项目开发,不可避免需要对lua代码断点调试功能

参考查到的资料逐步踩坑后整理一下自己的操作流程.

根据现有网上资料汇总 初步有以下几个调试工具和方案

1 VsCode + EmmyLua扩展

   1) Attach Debugger

   2) Emmy New Debugger

两种调试器 需要配置 launch.json  [详情在下一篇笔记中汇总整理]

2 VsCode + luaIde  [其中luaIde收费版才支持xlua调试 . 暂未尝试]

3 在Unity中调试Lua:IntelliJ IDEA + EmmyLua  [成功采用的方案 可以支持xlua调试 开发 跳转 智能补全等]

本文记录 方法3 IntelliJ IDEA + EmmyLua 的配置流程和操作方法

以下按照流程顺序讲解方案3 .具体视频操作教程在最后百度网盘中. 没有使用 attach to Process.

 

 

1 首先安装 Intellij Idea编辑器 IntelliJ IDEA 2020.3 (Community Edition)

官网下载地址 https://www.jetbrains.com/idea/download/#section=windows

 

2 安装 EmmyLua插件

unity连接kepserver_再启动

 

 

 

3 下载 Lua For windows

https://static.runoob.com/download/LuaForWindows_v5.1.4-46.exe

 

4  安装Lua本地环境 并配置到idea

让idea识别 xlua中的 *.lua.txt文件

unity连接kepserver_unity连接kepserver_02

 

 

 

5  去除大小写检查

unity连接kepserver_再启动_03

 

 

 

* 只是调试Unity xlua 非必要步骤

  想要idea直接运行的lua文件 需要找到luaSDK lua.exe执行文件

unity连接kepserver_lua_04

 

6 准备好Untiy xlua项目 并配置lua项目文件的root Floader

unity连接kepserver_lua_05

 

 

 7 xlua示例中的 LuaBehaviour 中调用的 DoString() 的写法纠正 

xlua文档如是说

unity连接kepserver_lua_06

 

 

 示例中代码需要改动成为自己要调试的lua文件名字 (eg 我要调试的是LuaTestScript.lua.txt  此处改为  "LuaTestScript.lua"  or  "LuaTestScript")

 

unity连接kepserver_ide_07

 

 

 

unity连接kepserver_ide_08

 

8 配置idea 调试环境

创建一个 EmmyDebugger

unity连接kepserver_再启动_09

 

 

 此处2个选项 一般用前者即可.先启动Unity运行程序 .再启动debugger去连接 .

下面生产的3行代码放置于要调试的lua脚本顶部. 由Unity启动xlua加载并运行该脚本. 运行了emmy_core.all中tpcListen本地的9966端口

unity连接kepserver_lua_10

例如这样

unity连接kepserver_再启动_11

 

 

 

 

 

 9 开始调试

先启动Unity 运行 xluaDemo 02 再启动idea我们配置好的debugger 结果如下 update断点生效

 

 

unity连接kepserver_ide_12

如果未能正常触发断点可尝试强制断点  加一句 dbg.breakHere()

unity连接kepserver_unity连接kepserver_13

 

 

 10 .第二种调试配置演示

unity连接kepserver_lua_14

 

Debugger Connect IDE 配置  下面Listener() 就变更为 tcpConnect() 

同样将这3行代码copy替换到lua文件顶部

然后先启动Debugger 再启动Unity. 等运行到lua文件指定强制断点位置 第9行 .也会触发断点

unity连接kepserver_ide_15

 

 

爬坑答疑.FAQ

Q.按照其他教程演示断点无法触发

A.确认本文 步骤6 xlua项目的root目录的配置方式和生效

 确认本文 步骤7 chunkname 是否跟所在断点的lua文件名一致 .在C# doString调用前输出log出来确认一下.

 确认本文 步骤8 调试代码 重点是dbg.tcpListen(localhost,"9966") 端口配置是否生效.应当与debugger中的配置一致.而且没有被其他进程占用