一、LuaPanda介绍
LuaPanda是腾讯开源的一款用于vscode的Lua代码工具,类似于vscode中的luaide,不过luaide是收费的,而luapanda是开源的,而且luapanda还补充了一些luaide没有支持到的功能;
主要特性截图自官方介绍:
LuaPanda中已经给出了比较详细的教程,这里主要是总结归纳一下自己在第一次配置时遇到的一些问题,希望对大家能够有所帮助;
二、安装步骤
首先从github下载xlua,这是之后我们要进行调试的工程
然后打开vscode,在插件栏中选择LuaPanda下载;
注意:如果你使用了luaide等其它调试工具,需要将其它插件关闭;
1.在vscode中配置xlua格式
由于xlua的lua文件格式是.lua.txt的,所以vscode默认情况下并不能将其识别为lua文件,需要我们通过settings来完成;
这里我们需要使用ctrl+shift+P(windows)打开命令面板,然后输入open settings,如下图,选择json文件,
然后将下面的代码放置进去,完成配置;
{
"files.associations": {
".txt":"lua"
},
"luaide.apiType":"xlua"
}
注意:在选择配置文件时一定要选择workspace settings而不是user settings,选择之后会在工程根目录下生成一个.vscode文件夹,里面有一个settings.json;如果.lua.txt文件中出现了lua的语法高亮,则为配置成功;
参考:vscode-settings,可以查看vscode 配置的官方文档,里面介绍了一些基础概念,如workspace等;
2.生成LuaPanda的Launch.json文件
在调试选项中选择生成launch.json,然后选择luapanda;
注意:如果没有看到luapanda,需要重启一下vscode,或者将其它调试器关掉后重启;、
生成了如下三种配置,三种不同的用法之后会讲到,这里我们需要注意的设置就是luaFileExtension选项,我们需要配置成我们xlua的格式,也就是".lua.txt";
{
"version": "0.2.0",
"configurations": [
{
"type": "lua",
"request": "launch",
"name": "LuaPanda",
"program": "",
"cwd": "${workspaceFolder}",
"luaFileExtension": "lua.txt",
"connectionPort": 8818,
"pathCaseSensitivity": true,
"stopOnEntry": true,
"useCHook": true,
"autoPathMode": true,
"logLevel": 1
},
{
"type": "lua",
"request": "launch",
"name": "LuaPanda-Attach"
},
{
"type": "lua",
"request": "launch",
"name": "LuaPanda-DebugFile",
"luaPath": "",
"packagePath": [],
"luaFileExtension": "",
"connectionPort": 8818,
"stopOnEntry": true,
"useCHook": true,
"logLevel": 1
}
]
}
LuaPanda支持可视化配置:点开VSCode底框中的LuaPanda即可;
3.unity中添加LuaPanda文件
https://github.com/Tencent/LuaPanda/blob/master/Debugger/LuaPanda.lua
需要到LuaPanda的github上下载LuaPanda文件,LuaPanda.lua中也为我们提供了很多调试的接口;
需要将LuaPanda的后缀名修改为lua.txt,然后将其放入到unity中,这里我们随机选择xlua中的一个案例的目录,如xlua中的02_U3DScripting,然后将该文件放入到该目录下;之后我们需要在LuaTestScript.lua.txt文件开始添加require("LuaPanda").start("127.0.0.1",8818);如果没有加入该行代码,是无法调试的哦;
三、开始调试
如上提到,在Launch.json中提供了三种配置:
1.LuaPanda模式
默认为LuaPanda,使用该模式时,我们需要事先打开调试器,然后再运行unity工程,我们可以在LuaTestScript中打断点;
注意:如果你没有做第二节第一步的操作,是不能打断点的;
我们这时候会发现一点,代码在执行到require("LuaPanda").start("127.0.0.1",8818)这一行就会命中,这是因为在launch.json中有一个"stopOnEntry": true,配置,它会在入口就自动断点一次,如果我们不需要就直接设为false即可;这个问题在其它模式也会出现;
我们可以在unity运行之后随意的添加断点和删除断点,这也是一个比较强大的地方;
2.LuaPanda-Attach模式
LuaPanda-Attach模式,它支持在游戏运行中开启lua调试器,也就是如果游戏已经运行了才想要进行lua的调试则使用该模式;
3.LuaPanda-DebugFile模式
这个模式还没有使用过,不过应该是和控制台调试相关,和xlua没有多少关系,如果后续了解,再进行补充;
四、更多
1.使用LuaPanda提供的API手动断点
我们可以在代码中调用LuaPanda.BP(),它就会在该代码的下一行添加一个断点,和编辑器添加一样;
在断点处,我们还可以在控制台输入LuaPanda.getInfo()以及LuaPanda.doctor()等获取更多信息(注意大小写),使用LuaPanda.getCWD()获取工作路径;
关于LuaPanda提供的API,在LuaPanda.lua文件开头可以看到相关说明;
LuaPanda.serializeTable(table),序列化一个table;
2.require("LuaPanda")
如果不想要在每个调试的lua文件前都添加require("LuaPanda").start("127.0.0.1",8818),那就可以在启动lua虚拟机时就加载好该模块;
3.子目录断点无用&查找不到某个文件
有可能是未能把“.”转换成目录分隔符;
修改luapanda.lua中的GetPath()函数,尝试添加如下代码
filePath = string.gsub(filePath, "%.", "/");
4.单文件调试
luapanda支持单个文件的调试,但是需要修改launch.json
其实相比于正常的调试,这里只需要添加luaPath和packagePath,然后在调试选项中选择单文件调试即可;可能会需要自己安装luasocket
这里已经配置了lua解释器的路径,因此直接F5开始调试就会运行当前打开的lua文件。
5.手动路径模式与重名文件
自动路径模式是使用文件名到工作目录下去查找文件,所以如果项目中不可避免有重复文件名的文件时,就需要使用手动路径模式;
使用手动路径模式,我们需要配置好Launch.json文件里的pwd,也就是工作目录,本模式下会使用 cwd+getInfo 和 VSCode 传来的断点路径作对比,完全一致才算命中;
注意:打开的工作目录不同,这里的配置就可能不同,需要根据实际情况在Launch.json中的pwd做调整;
VSCode遇到找不到文件的问题:这个通常就是cwd+getInfo与VSCode传来的路径不一致的问题,可以使用LuaPanda.BP()在代码中手动添加断点,然后用LuaPanda.getInfo()查看路径;然后看路径那里除了问题,之后再根据问题到LuaPanda文件中的getPath()函数中去判断,这个函数的输入是getInfo()中获取的路径,输出的是format路径,可以从中比对到底为什么出现了不一致的问题;
require的路径前不能有/开头,可能会导致出错,因为在LuaPanda.getPath()中会将此视为绝对路径,不再处理;
6.libpdebug加载报错
首先是不影响调试器运行的,然后,加载报错通常是xlua重写的CustomLoader没有支持so/dll的处理;
7.控制台调试
断点之后我们可以在控制台输入变量以及代码等来查看更多详细的信息;
8.LuaPanda官方交流群
974257225,官方交流qq群,群主非常nice,很及时效率也很高;