Sublime Text 本身不提供 Lua 调用堆栈监控能力,需依赖 lua-language-server(LSP)捕获未捕获异常并推送带完整堆栈的诊断信息;仅装 Lua Enhanced 或配置构建系统无效,必须安装 LSP 插件、正确配置 luaconfig.json 并确保 LSP 绑定成功,堆栈仅在 error() 或未捕获异常触发时显示,且受 lua_code_cache、pcall 封装、中文路径等因素影响。

Sublime Text 本身不提供 Lua 调用堆栈监控能力
它没有内置调试器,也不运行 Lua 解释器——所有“调试”行为都依赖外部工具链。所谓“监控调用堆栈”,实际是让 lua-language-server(LSP)捕获错误并把带完整堆栈的诊断信息推给 Sublime,再由 LSP 插件渲染出来。这和 VS Code 的调试面板完全不同:你不会看到暂停、变量监视或单步执行,但能实时看到 error() 或未捕获异常触发的完整调用链。
必须启用 LSP + 正确配置 lua-language-server
仅装 lua-enhanced 插件或配个 Lua.sublime-build 是没用的,它们只管高亮和运行,不生成堆栈。关键动作如下:
- 确保已安装
lua-language-server(不是lua命令本身),且终端能执行lua-language-server --version - 在 Sublime 中安装官方
LSP插件(非 LSP-Sublime 或旧版 LSP),并启用它 - 项目根目录必须有
luaconfig.json,且包含准确的workspace.library路径,例如:{"workspace": {"library": ["/usr/local/openresty/lualib", "./?.lua"]}}否则ngx.req.get_uri_args()这类调用会被标为“未定义”,LSP 根本不分析上下文,自然不报堆栈 - 打开
.lua文件后,右下角应显示LSP: lua,否则 LSP 没绑定成功
堆栈信息只在特定错误下可见
不是所有报错都带堆栈。LSP 默认只对语法错误、类型警告、未定义符号等做静态分析;真正触发运行时堆栈的,是 Lua 执行中抛出的未捕获异常。你需要主动制造或复现这类场景:
- 在代码里加
error("debug stack")或故意调用nil() - 确保该文件被 OpenResty 实际加载(比如放在
content_by_lua_file配置项中),否则异常根本不会发生 - 如果用了
pcall或xpcall吞掉了错误,堆栈就不会上浮到 LSP 可见层 - 注意:构建系统(Ctrl+B)运行的脚本走的是独立
lua进程,LSP 不介入——此时堆栈只在控制台(Ctrl+`)里以纯文本形式打印,且无跳转支持
容易忽略的堆栈丢失原因
即使 LSP 正常工作,你也可能看不到堆栈,常见盲点包括:
-
lua-language-server启动失败但静默——检查 Sublime 控制台(Ctrl+`)里是否有LSP: failed to start或spawn ENOENT - OpenResty 环境下
lua_code_cache on导致修改不生效,你以为在跑新代码,其实还是旧版本,堆栈指向错误行号 - 路径含中文或空格,
lua-language-server解析失败,日志里出现invalid UTF-8但不中断服务 - 你在
init_by_lua里出错,LSP 无法捕获——那阶段代码在 Nginx master 进程初始化时执行,不属于任何请求上下文,堆栈只出现在error.log中
















