原文地址: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/")  -- remotemobdebug.lbasedir("/Users/wilburxu/lua/test/")  -- localmobdebug.start("host.docker.internal", 28172);


ps:断点信息发回的是远端服务器的line,所以本地服务器要保障和远端服务器的line统一。

本地增加调试configuration

发送申请


就能够失去咱们想要的堆栈信息了。

MobDebug的根本构造

mobdebug是一个纯lua实现的近程调试器,依赖于luasocket,根本的通信形式是应用字符串的形式在目标程序和IDE之间传输相应的控制指令和执行后果,mobdebug与远端交互的数据是间接包装成Lua格局的字符串的。

交互协定

mobdebug应用的通信模式是应答式的,也就是大部分时候都是远端的IDE向调试目标程序发送一条命令后,就进入期待调试指标返回后果的状态了,在EmmyLua源代码侧的体现就是保护了一个Command队列,如果Command是须要应答的,那只有以后Command被解决完后,才会接着发送队列中残余的Command。