




















OpenResty > Lua断点调试_openresty debug-CSDN博客
在 OpenResty 开发中,调试 Lua 代码一直是个痛点。本文将详细介绍如何使用 VSCode + LuaPanda 实现图形化断点调试。
OpenResty 基于 Nginx + LuaJIT,与普通 Lua 环境有所不同:
因此,配置调试环境需要一些额外步骤。
/usr/local/openresty)在 VSCode 扩展市场搜索并安装 LuaPanda。
LuaPanda 依赖 luasocket 进行网络通信。关键点:必须为 LuaJIT 编译 luasocket。
# 安装 luarocks
brew install luarocks
# 为 LuaJIT 编译安装 luasocket(关键步骤!)
luarocks --lua-dir=/usr/local/openresty/luajit --lua-version=5.1 install luasocket
bash
注意:直接
luarocks install luasocket会安装 Lua 5.4 版本,与 OpenResty 的 LuaJIT 不兼容,会报错please install luasocket!
安装完成后,luasocket 位于 ~/.luarocks/ 目录:
~/.luarocks/
├── share/lua/5.1/
│ ├── socket.lua
│ └── socket/
└── lib/lua/5.1/
├── socket/core.so
└── mime/core.so
mkdir -p ~/LuaProjects/debugger
curl -o ~/LuaProjects/debugger/LuaPanda.lua \
https://raw.githubusercontent.com/Tencent/LuaPanda/master/Debugger/LuaPanda.lua
bash
在项目 根目录创建 .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "lua",
"request": "attach",
"name": "LuaPanda Attach",
"cwd": "${workspaceFolder}",
"luaFileExtension": "",
"connectionPort": 8818,
"stopOnEntry": false,
"useCHook": true,
"autoPathMode": true
}
]
}
json
在 nginx.conf 中添加 Lua 路径配置:
http {
# LuaPanda 调试库路径 + luasocket 路径
# 注意:~ 在 nginx 中不会展开,必须使用绝对路径
lua_package_path "/Users/<用户名>/LuaProjects/debugger/?.lua;/Users/<用户名>/.luarocks/share/lua/5.1/?.lua;/Users/<用户名>/.luarocks/share/lua/5.1/?/init.lua;;";
lua_package_cpath "/Users/<用户名>/.luarocks/lib/lua/5.1/?.so;/Users/<用户名>/.luarocks/lib/lua/5.1/socket/?.so;/Users/<用户名>/.luarocks/lib/lua/5.1/mime/?.so;;";
server {
listen 8088;
location /test {
content_by_lua_file lua/test.lua;
}
}
}
nginx
说明:将
<用户名>替换为你的 macOS 用户名。路径解释:
/Users/<用户名>/LuaProjects/debugger/?.lua- LuaPanda.lua 所在目录/Users/<用户名>/.luarocks/share/lua/5.1/?.lua- luasocket 的 Lua 文件/Users/<用户名>/.luarocks/lib/lua/5.1/?.so- luasocket 的动态库
在需要调试的 Lua 文件开头添加:
require("LuaPanda").start("127.0.0.1", 8818)
lua
完整示例 /Users/<用户名>/LuaProjects/debugger-test/lua/test.lua:
-- 引入 LuaPanda 调试器
require("LuaPanda").start("127.0.0.1", 8818)
-- 测试变量
local name = "OpenResty"
local version = 1.21
local items = {"apple", "banana", "orange"}
-- 测试函数
local function greet(who)
local message = "Hello, " .. who .. "!"
return message
end
-- 测试循环
local sum = 0
for i = 1, 10 do
sum = sum + i
end
-- 调用函数
local result = greet(name)
-- 输出响应
ngx.say(result)
ngx.say("Sum: " .. sum)
lua
F5,选择 “LuaPanda Attach”,等待连接# 进入你的 OpenResty 项目目录(包含 conf/、lua/、logs/ 的目录)
cd /Users/<用户名>/LuaProjects/debugger-test
openresty -p `pwd` -c conf/nginx.conf
bash
将路径替换为你实际的项目目录
curl http://localhost:8088/test
bash
命中断 点后,可以:
原因:luasocket 版本与 LuaJIT 不兼容。
解决:使用正确的命令安装:
luarocks --lua-dir=/usr/local/openresty/luajit --lua-version=5.1 install luasocket
bash
检查:
lua_package_path 和 lua_package_cpath 路径是否正确这是 OpenResty 的全局变量 写入警告,不影响调试功能,可忽略。
require("LuaPanda").start(...) 代码if os.getenv("DEBUG") then
require("LuaPanda").start("127.0.0.1", 8818)
end
lua
通过 VSCode + LuaPanda,我们可以在 OpenResty 项目中实现图形化断点调试,大大提升开发效率。关键点是确保 luasocket 使用 LuaJIT 编译,并正确配置 Lua 路径。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。