原文地址:lua 近程调试 Remote Debug
日常的 debug
当把一个本地我的项目部署到 近程测试服务器 后有可能呈现意想不到谬误,为了排查问题可能会变成:
这样:
而后这样:
最初就:
最可怕的是,因为堆栈的关系,很难在一次 debug 日志中拿到想要的信息,往往是一层层往下打日志,能力拿到想要的 debug 信息。
remote debug
本地服务器凋谢端口,将近程服务器的断点信息打到本地服务器。
那具体如何实现呢?
jetbrains 的“EmmyLua”插件 + mobdebug 库
本地 jetbrains 减少 EmmyLua 插件装置
远端服务器减少 mobdebug 包放到我的项目 debug 目录下,并减少配置信息
https://github.com/pkulchenko…
local mobdebug = require("debug.mobdebug");
mobdebug.rbasedir("/usr/local/openresty/nginx/lua/") -- remote
mobdebug.lbasedir("/Users/wilburxu/lua/test/") -- local
mobdebug.start("host.docker.internal", 28172);
ps:断点信息发回的是远端服务器的 line,所以本地服务器要保障和远端服务器的 line 统一。
本地增加调试 configuration
发送申请
就能够失去咱们想要的堆栈信息了。
MobDebug 的根本构造
mobdebug 是一个纯 lua 实现的近程调试器,依赖于 luasocket,根本的通信形式是应用字符串的形式在目标程序和 IDE 之间传输相应的控制指令和执行后果,mobdebug 与远端交互的数据是间接包装成 Lua 格局的字符串的。
交互协定
mobdebug 应用的通信模式是应答式的,也就是大部分时候都是远端的 IDE 向调试目标程序发送一条命令后,就进入期待调试指标返回后果的状态了,在 EmmyLua 源代码侧的体现就是保护了一个 Command 队列,如果 Command 是须要应答的,那只有以后 Command 被解决完后,才会接着发送队列中残余的 Command。