安装 lua5.3
坑1:lua5.4 与 mobdebug 存在兼容性问题
不能使用 lua5.4,lua5.4现在对 mobdebug 兼容有问题。
# 如果使用 brew install lua ,会自动安装最新版本
brew install lua@5.3
brew link lua@5.3
# 此时会自动link,进行下一步之前,先检查一下lua环境是不是ok了
安装 luarocks
参考:https://ttys3.dev/post/lua/luarocks-install-and-setup/
坑2:brew install luarocks
安装版本不对
不能使用 brew install luarocks
,他会自己安装基于 lua5.4 的 luarocks。
官方安装文档:https://github.com/luarocks/luarocks/wiki/Installation-instructions-for-Unix
# 下载
wget https://luarocks.org/releases/luarocks-3.7.0.tar.gz
tar zxpf luarocks-3.7.0.tar.gz
坑3:官方文档指令不能直接使用
官方文档说应该用 ./configure --with-lua-include=/usr/local/include
,但实际不能加 --with-lua-include=/usr/local/include
,这会导致 lua 依赖的路径错误。
可能会产生类似 Failed finding Lua header files. You may need to install them or configure LUA_INCDIR
的错误。
出现这种错误的原因还是 --with-lua-include=/usr/local/include
后边跟的这个路径不对,在我的环境中,应该为 --with-lua-include=/usr/local/opt/lua@5.3/include/lua5.3
。
在不指定这个参数的时候,会自动检测路径,未来避免出错,最好还是不要指定,除非系统里装了多版本的 lua 。
cd luarocks-3.7.0
./configure
此时会提示:
* Type make and make install:
to install to /usr/local as usual.
* Type make bootstrap:
to install LuaRocks into /usr/local as a rock.
让我们在 make && make install
和 make bootstrap
之间选择,此处推荐 make bootstrap
make bootstrap
安装 luacheck、luasocket
坑4:rock tree 与安装 scope
在上一步安装完之后,会有类似以下输出:
Configuration:
Lua:
Version : 5.3
Interpreter: /usr/local/bin/lua5.3 (ok)
LUA_DIR : /usr/local (ok)
LUA_BINDIR : /usr/local/bin (ok)
LUA_INCDIR : /usr/local/opt/lua@5.3/include/lua5.3 (ok)
LUA_LIBDIR : /usr/local/opt/lua@5.3/lib (ok)
Configuration files:
System : /usr/local/etc/luarocks/config-5.3.lua (ok)
User : /Users/eric/.luarocks/config-5.3.lua (ok)
Project : /tmp/luarocks-3.7.0/./.luarocks/config-5.3.lua (ok)
Rocks trees in use:
/tmp/luarocks-3.7.0/./lua_modules ("project")
/Users/eric/.luarocks ("user")
/usr/local ("system")
其中:
Lua
指出 lua 依赖相关路径Configuration files
指出了配置文件路径Rocks trees in use
指出了安装lua_modules
时的目标根路径,后边括号里的"project"
、"user"
、"system"
,是指不同的scope
,使用luarocks install xxx
时应该格外注意安装的scope
是否正确。
像上边这个输出显示,project scope 是在 /tmp 下的一个路径,所以如果安装到这里的话,项目目录可能就找不到包。
这里应该格外注意的是:Rocks trees
是一个树状结构,这里边显示的是根路径,真实的安装目录应该是 Rocks trees
和 lib_modules_path
拼起来。
以system scope
为例,
运行指令 luarocks
,获得以下输出:
➜ luarocks
……
……
……
Rocks trees in use:
/Users/eric/.luarocks ("user")
/usr/local ("system")
可知,luarocks
的system scope
中的 Rocks tree
路径为 /usr/local
运行 luarocks config --scope user lib_modules_path
,获得以下输出:
➜ luarocks config --scope user lib_modules_path
/lib/lua/5.3/
可知,luarocks
的system scope
中的lib_modules_path
为 /lib/lua/5.3/
此时如果要安装到 system scope
,这会安装到 /usr/local/lib/lua/5.3/
运行 lua -e 'require "abc"'
,获得以下输出:
lua: (command line):1: module 'abc' not found:
no field package.preload['abc']
no file '/usr/local/share/lua/5.3/abc.lua'
no file '/usr/local/share/lua/5.3/abc/init.lua'
no file '/usr/local/lib/lua/5.3/abc.lua'
no file '/usr/local/lib/lua/5.3/abc/init.lua'
no file './abc.lua'
no file './abc/init.lua'
no file '/usr/local/lib/lua/5.3/abc.so'
no file '/usr/local/lib/lua/5.3/loadall.so'
no file './abc.so'
上面输出的这些路径就是 lua 查找 package 时会检索的目录,应该保证 Rocks tree
和 lib_modules_path
拼接后的路径可以被 lua 检索到。
如果 lib_modules_path
路径不对,可以通过下面的指令进行配置:
luarocks config --scope user lib_modules_path /lib/lua/5.3/
一切就绪,安装 luacheck
和 luasocket
luarocks install luacheck
luarocks install luasocket
运行 lua -e 'require "socket"'
,如果没有报错,说明安装成功。
使用 EmmyLua MobDebug 进行 debug
基本所有的 Lua debug 工具都基于 MobDebug ,像 EmmyLua 、 LuaPanda 。
IDEA 系列 IDE 推荐使用 EmmyLua ,vscode 编辑器推荐使用 LuaPanda 。
IDEA 中的 EmmyLua 插件已经集成了 MobDebug 。
使用 EmmyLua 中的 MobDebug 的方式,EmmyLua的文档里有很简略说明,
详见: https://emmylua.github.io/run.html#get-ready
step.1. 目录结构
➜ tree
.
└── src
├── dev1.lua
└── mobdebug.lua
需要将 src 标为 Sources(源 根),显示为蓝色。
从 https://github.com/pkulchenko/MobDebug 下载 MobDebug 项目,
将 MobDebug/src/mobdebug.lua
放到项目 src 目录面。
step.2. 创建运行配置
step.3. 创建 debug 配置
step.4. 进行debug
先点击 debug按钮 运行 Lua Remote(MobDebug)效果如下图
再点击运行按钮运行 dev1.lua,成功进入 debug 模式