作者:刘树伟
日期:2021-01-11
环境:
Win10,VSCode1.52.1,CentOS7.4
一、Win10上调试本机 Lua
安装插件:Lua Debug(不支持require动态库)
二、Win10上远程调试CentOS上的Lua
安装插件:LRDB,LRDB表示Lua remote debugger(不支持require动态库)
三、CentOS7.4上调试本机Lua
3.1 安装libXss.so
官方引用页:
https://pkgs.org/download/libXss.so.1%28%29%2864bit%29
https://centos.pkgs.org/7/centos-x86_64/libXScrnSaver-1.2.2-6.1.el7.x86_64.rpm.html
官方下载地址:
http://mirror.centos.org/centos/7/os/x86_64/Packages/libXScrnSaver-1.2.2-6.1.el7.x86_64.rpm
在CentOS7.4上直接安装vscode的时候,会提示找不到libXss.so,所以先下载libXss.so,然后安装:
rpm -ivh libXScrnSaver-1.2.2-6.1.el7.x86_64.rpm
3.2 安装vscode
官方下载地址:
安装命令:
rpm -ivh code-1.52.1-1608137084.el7.x86_64.rpm
3.3 安装Local Lua Debugger插件
执行命令:
code --user-data-dir
打开vscode
在扩展插件中,搜索到Local Lua Debugger后安装,注意是Tom Blind发布的。
3.3 准备动态库
我们的lua脚本在/root/lua_script文件夹下,文件名为1.lua,内容前两行为:
local lfs = require "lfs"
local cjson = require "cjson"
这表示lua要引入lfs.so和cjson.so库。
我们在shell中,执行:
lua /root/lua_script/1.lua 1 1 1
输出:
lua: /root/lua_script/.lua: 1: module 'lfs' not found:
no field package.preload['lfs']
no file './lfs.lua'
no file '/usr/share/lua/5.1/lfs.lua'
no file '/usr/share/lua/5.1/lfs/init.lua'
no file '/usr/lib64/lua/5.1/lfs.lua'
no file '/usr/lib64/lua/5.1/lfs/init.lua'
no file './lfs.so'
no file '/usr/lib64/lua/5.1/lfs.so'
no file '/usr/lib64/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'require'
/root/lua_script/1891_avscan.lua:1: in main chunk
[C]: ?
从输入信息,可以发现lua寻找动态库的路径顺序。前面几个路径,都是寻找lfs.lua,只有从/usr/lib64/lua/5.1/中是寻找lfs.so。所以我们事先把lfs.so和cjson.so放到/usr/lib64/lua/5.1/中。
3.4 调试Lua
通过vscode打开/root/lua_script文件夹(vscode没有工程概念,一个文件夹就是一个工程),然后运行菜单【Run】下面的【Open Configurations】,在文件夹下自动生成一个隐藏的文件夹“.vscode“,里面自动创建一个launch.json文件,内容如下(下面的内容是修改后的):
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug Lua Interpreter",
"type": "lua-local",
"request": "launch",
"program": {
"lua": "lua",
"file": "1.lua"
},
"args": ["1", "1", "2"]
},
{
"name": "Debug Custom Lua Environment",
"type": "lua-local",
"request": "launch",
"program": {
"command": "command"
},
"args": []
}
]
}
上面的json生成两个配置项,分别是Debug Lua Interpreter和Debug Custom Lua Environment。我们使用Debug Lua Interpreter即可。
我们把里面的file改成1.lua,在1.lua里加上断点后,按F5就可以单步调试了。快捷键和VS一样,F10表示单步,F11表示进入函数内部。