2

原文地址:lua远程调试 Remote Debug

日常的debug

当把一个本地项目部署到远程测试服务器后有可能出现意想不到错误,为了排查问题可能会变成:

这样:
image.png

然后这样:

最后就:

最可怕的是,由于堆栈的关系,很难在一次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。


WilburXu
124 声望29 粉丝

do not go gentle into that good night.