资讯详情

Kong 如何在 IDE 中用 EmmyLua 打断点调试 Lua 代码

📅 2026/9/10 18:42:31 | 华诺云谱 👁 阅读
Kong 如何在 IDE 中用 EmmyLua 打断点调试 Lua 代码
Kong 如何在 IDE 中用 EmmyLua 打断点调试 Lua 代码【免费下载链接】kong The API and AI Gateway项目地址: https://gitcode.com/GitHub_Trending/ko/kong在开发 Kong 插件或阅读 Kong 源码时光靠日志很难看清请求上下文里的变量。DEVELOPER.md 给出的方案是用 EmmyLua 调试器在 IntelliJ IDEA 或 VSCode 中直接打断点启动 Kong 时通过KONG_EMMY_DEBUGGER环境变量加载一个 C 调试库IDE 侧由 EmmyLua 插件连接该库之后就能在 Lua 代码中设置断点、命中后查看变量。该集成在 changelog/3.7.0/kong/feat-emmy-debugger.yml 中被标记为 tech preview技术预览Kong Inc. 不为其提供官方支持属于纯粹的开发期便利功能Kong 官方明确不对使用该集成产生的后果负责相关问题应反馈给 EmmyLua 项目。一、安装 IDE 与 EmmyLua 插件两条路径任选其一后续步骤通用。IntelliJ IDEA 路线从 JetBrains 官网下载并安装 IntelliJ IDEA。注意 IntelliJ 是商业软件试用期结束后需要付费许可证。进入Settings→Plugins→Marketplace搜索EmmyLua并安装该插件。VSCode 路线从 Microsoft 官网下载并安装 VSCode。进入Settings→Extensions搜索EmmyLua并安装插件发布者publisher必须是Tangzx搜索结果中有同名插件时以此区分。EmmyLua 本身是 IntelliJ IDEA 和 VSCode 的 Lua 语言支持插件自带调试器支持这是能够打断点的前提。二、下载 EmmyLua 调试服务端IDE 插件不能直接连到 Kong 内部的 Lua 代码中间需要 EmmyLuaDebugger——一个运行在与 Kong 同一台机器上的独立 C 程序负责在 IDE 调试器和 Kong 中运行的 Lua 代码之间做中介。从 EmmyLuaDebugger 项目的 GitHub Releases 页面下载 release 包。ZIP 文件里只有一个共享库文件Linuxemmy_core.somacOSemmy_core.dylib把这个文件放到你方便的目录并记住它的绝对路径——启动 Kong 时要用。一个 Linux 环境的限制需要注意GitHub 上发布的预编译二进制定位的是比较新的 GLIBC。如果你的 Linux 发行版较老可能需要按 EmmyLuaDebugger 源码 说明自行编译而不是直接用 release 包里的库。三、带调试器启动 Kong启用调试器的关键动作只有一个启动 Kong 前把KONG_EMMY_DEBUGGER设置为调试共享库的绝对路径。同时建议只启动 1 个 worker 进程因为多 worker 调试需要额外处理原因见第六节的KONG_EMMY_DEBUGGER_MULTI_WORKER说明。完整命令KONG_EMMY_DEBUGGER/path/to/emmy_core.so KONG_NGINX_WORKER_PROCESSES1 kong start其中/path/to/emmy_core.so需要替换为你在第二节放置库文件的绝对路径例如你放在/opt/emmy/emmy_core.so命令就写成KONG_EMMY_DEBUGGER/opt/emmy/emmy_core.so ...。Kong 在 init_worker 阶段调用该集成见 kong/init.lua 中的Kong.init_worker加载逻辑在 kong/tools/emmy_debugger.lua。启动日志中如果看到下面的 NOTICE源代码中的日志文本路径部分随实际环境变化loading EmmyLua debugger /path/to/emmy_core.so EmmyLua debugger loaded, listening on port 9966说明库已加载、调试端口已监听可以进入 IDE 操作。如果没加载成功日志里会给出对应的错误提示代码中实际会校验四种情况见 kong/tools/emmy_debugger.lua路径不是绝对路径KONG_EMMY_DEBUGGER (...) must be an absolute path文件不存在KONG_EMMY_DEBUGGER (...) file not found扩展名不是.soLinux或.dylibmacOSmust be a .so (Linux) or .dylib (macOS) file当前不是第一个 worker 且未开启多 worker 调试KONG_EMMY_DEBUGGER is only supported in the first worker process, suggest setting KONG_NGINX_WORKER_PROCESSES to 1。四、在 IDE 中创建调试配置IntelliJ IDEA进入Run→Edit Configurations点击新建配置类型选择Emmy Debugger(NEW)起一个有辨识度的名字例如 Kong Gateway Debug点OK保存。VSCode进入Run→Add Configuration选择EmmyLua New Debugger同样命名为 Kong Gateway Debug保存launch.json。五、打断点并验证命中在 IntelliJ 中点击Run→Debug在 VSCode 中点击Run→Start Debugging选择刚创建的配置。连接建立后IDE 顶部的 restart 和 stop 按钮会分别变为实心的绿色和红色——这是文档给出的连接成功标志。文档建议的第一个验证断点在runloop/handler.lua中定义的 access 处理函数里打断点源码位于 kong/runloop/handler.lua文档原文称其为全局的 access 函数然后向 Gateway 发送一个代理请求。调试器应当停在断点上此时可以查看请求上下文request context里的变量。六、用环境变量控制调试行为以下环境变量控制 EmmyLua 调试集成的行为来自 DEVELOPER.md Debugging environment variables 一节变量用途KONG_EMMY_DEBUGGER调试共享库的路径必须是绝对路径KONG_EMMY_DEBUGGER_HOST调试器监听的 IP 地址默认localhostKONG_EMMY_DEBUGGER_PORT调试器监听的端口默认9966KONG_EMMY_DEBUGGER_WAIT设置后 Kong 会先等待调试器连接再继续启动KONG_EMMY_DEBUGGER_SOURCE_PATH调试器解析源码位置用的源码路径默认是当前工作目录KONG_EMMY_DEBUGGER_MULTI_WORKER设置后每个 worker 进程各启动一个调试器端口从KONG_EMMY_DEBUGGER_PORT起递增默认只为 0 号 worker 启动一个调试器例如想让调试器监听127.0.0.1的19966端口可以在启动命令中追加这两个变量KONG_EMMY_DEBUGGER/path/to/emmy_core.so \ KONG_EMMY_DEBUGGER_HOST127.0.0.1 \ KONG_EMMY_DEBUGGER_PORT19966 \ KONG_NGINX_WORKER_PROCESSES1 kong startKONG_EMMY_DEBUGGER_WAIT适合先启动 Kong再打开 IDE 连调试的顺序启动后 Kong 停在等待 IDE 连接的位置日志会打印waiting for IDE to connectIDE 连上后再继续避免请求先于连接到来。七、调试 busted 测试可选分支如果要调试的不是运行中的 Gateway而是 busted 测试用例用BUSTED_EMMY_DEBUGGER环境变量代替KONG_EMMY_DEBUGGER值同样是调试共享库的路径。注意文档明确说明启用调试后busted 启动时始终会等待 IDE 连接也就是说 IDE 侧必须先建立调试会话测试才会继续跑。KONG_前缀的其余变量也有对应的BUSTED_前缀版本如BUSTED_EMMY_DEBUGGER_HOST、BUSTED_EMMY_DEBUGGER_PORT。限制与注意事项该功能是 tech previewKong Inc. 目前不提供官方支持见 changelog/3.7.0/kong/feat-emmy-debugger.yml加载时 Kong 也会向日志打印一条 WARN说明此集成仅是开发便利功能Kong 不背书其使用。老版本 Linux 的 GLIBC 可能与 release 库不兼容需要自行编译 EmmyLuaDebugger。不开启KONG_EMMY_DEBUGGER_MULTI_WORKER时只有第一个 worker 进程支持调试所以调试场景建议把KONG_NGINX_WORKER_PROCESSES设为 1这也是第三节命令的默认写法。KONG_EMMY_DEBUGGER必须是绝对路径且文件存在扩展名必须为.so或.dylib否则调试器不加载且日志会按上面列出的错误提示给出原因。【免费下载链接】kong The API and AI Gateway项目地址: https://gitcode.com/GitHub_Trending/ko/kong创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。