当前位置:   article > 正文

VSCode使用EmmyLua插件调试_vscode emmylua

vscode emmylua

VSCode使用EmmyLua插件调试

记录一下, 谨防遗忘

Emmy插件安装

首先, 需要在vscode安装好EmmyLua插件, 也可以在 官方链接: Visual Studio Code>Programming Languages>EmmyLua 里下载合适版本.

前提配置

在lua脚本的入口处添加调试启动代码

打开找到的lua脚本, 在vscode中使用快捷键 ctrl + shift + P , 打开如下界面,
在这里插入图片描述使用快捷键   ctrl + shift + P  , 打开的界面
在输入框中输入emmylua, 筛选emmylua选项, 选择 EmmyLua:InsertEmmy Debugger Code, 然后选择合适自己平台的 X86或 X64选项, 插入启动代码. 启动代码如下

package.cpath = package.cpath .. ";c:/Users/Dell/.vscode/extensions/tangzx.emmylua-0.8.1-win32-x64/debugger/emmy/windows/x64/?.dll"
--这里是我windows的地址, 你生成的代码会是你自己的地址
local dbg = require("emmy_core")
dbg.tcpListen("localhost", 9966)

  • 1
  • 2
  • 3
  • 4
  • 5

新增调试

新建调试配置, (没有launch.json需要创建, 点击即可)
新建调试
调试器选择EmmyLua New Eebugger
emmylua调试器
一顿操作后, 我的launch.json 文件

//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"
            ],
            "ideConnectDebugger": true
        }
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

启动调试

好了, F5开始调试吧
(若有问题参见下文)

常见问题

实际调试中,断点后不会命中

解决方法:即在插入代码:local dbg = require(“emmy_core”)前加入上述红框代码。
其中,Scripts/Lua/ 为vscode项目工程根目录至lua目录的路径。该段代码中,vscode打开的文
件夹是Assets,且lua目录在Assets\Scripts\Lua下。

emmy = {}
function emmy.fixPath(path)
return "Scripts/Lua/"..path..".lua"
end

  • 1
  • 2
  • 3
  • 4
  • 5

附(大佬手记)

原理简单说明:
lua代码中通过 local dbg = require(“emmy_core”) 主动加载 emmy_core.dll
到宿主程序中,并启动调试内核代码。调试内核通过socket与IDEA/VSCode侧连接通
讯。
注意:Windows下的emmy_core.dll 分32位和64位,注意区分

启动顺序的要求:
上面提到调试内核与 IDEA/VSCode 通过socket通信,有 Server端和 Client
端角色之分,所以提供了两种连接模式和对应的启动顺序要求:
1. Debugger connect IDE: 即IDE充当Server侧,这时应先启动IDE侧的调试功能
,等待被调试的程序启动并主动连接到IDE。注意:此时插入的Lua代码应当是
dbg.tcpConnect(‘localhost’, 9966)
2. IDE connect debugger: 即被调试的程序充当Server端,这时被调试的程序应
先启动,再启动IDE侧的调试功能连接到调试内核。注意:此时插入的Lua代码应
当是 dbg.tcpListen(‘localhost’, 9966)

Q: 不能连接的问题:
IDEA 提示相关错误: Connection refused: connect
原因:没有按启动顺序要求启动Server端
解决思路:按照 “启动顺序的要求” 先启动被调试的程序

Q: 不能断点的问题:
IDEA/VSCode 下了断点但不能命中:
1. 首先检查使用最新版本emmy_lua插件,群里的版本比较新,但想要最新的最好是
去CI上去下载每日构建版本,地址见群公告
2. 不能断点的大部分原因是你的宿主代码中(c++/c#)对于类似 load 函数的调用中
的 chunkname 的值给的不正确,导致文件路径不匹配而不能命中断点。例如代
码用到了 require(“a.b.c”) ,那么在加载 c.lua 文件时给的 chunkname
参数应当是 “a/b/c.lua”
另外调试器提供了一个“强断”的功能,即在要断点的地方写上lua代码:dbg.breakHere()
用这个功能可以查看强断后堆栈里显示的路径正不正常

Q: Mac上提示 ‘dynamic libraries not enabled;check your lua installation’
这个问题需要重新编译lua c代码所在的模块,加上编译宏: LUA_USE_MACOSX。(Unity下
下的xlua.bundle/tolua.bundle替换之后要重启Unity)

Q: local dbg = require(“emmy_core”) 失败报错
你的代码里写了自定义的loader,emmy_core并不是一个lua文件,请判断一下,如果加载的
是emmy_core请不要处理也不要报错,交由低层的clib loader继续处理

Q: local dbg = require(“emmy_core”) 返回一个boolean值
emmy_core库初始化失败,通常是发生在windows平台下。这是因为emmy_core在初始化会
根据lua函数名字去找函数地址,如根据"lua_settop"去找内存中的函数地址,如果找不到则会
导致初始化失败,通常是因为lua相关的函数没有被导出
解决方法1:让你的程序导出lua符号表(加上编译宏LUA_BUILD_AS_DLL)
解决方法2:选择使用自带lua代码版本的emmy_core.dll(下个版本)

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/904794
推荐阅读
相关标签
  

闽ICP备14008679号