使用ZeroBrane远程在线调试Openresty, Nginx的Lua程序
作者:糖果
ZeroBrane是一个开源的Lua编辑器IDE,自带Lua运行程序和基本的库。最主要的一点,就是ZB可以远程在线的调试,nginx或是openresty上运行的lua脚本。
在编辑方面可以和VIM及插件互补,多去一句,如果花点时间,给VIM按装补全插件,目录插件,tmux, tup,在分屏状态下,vim还是不错的,其实也可以把ZB的远程调试功能,也做插件,让VIM可以进行远程在线调试。
毕竟把系统的Log打的很全,如果可以在线调试,给WEB服务上运行的脚本程序下断点,对调试工作,也大有裨益。
下面就开始介绍,ZB如何进行在线调试。
1.下载ZB。
https://github.com/pkulchenko/ZeroBraneStudio
里面有一个.sh文件,就是在linux上运行ZB的启动程序。因为我们的Lua WEB程序在VPS上,运行ZB需要给VPS安装Desktop,用VNC连上去。可以参考另外一篇文章。
图片:1.jpg
这是运行起来的ZB界面,这个已经进入的调试工作状态。
2.创建一个Lapis工程,使用如下的命令:
lapis new
关于lapis更具体工程创建,也可以参考别一篇文章。
图片:2.png
创建工程后,会自动的创建一些文件,在这些文件中关键的文件有:
nginx.conf(OpenResty的配置文件)
test.lua (我们准备调试的主程序)
mobdebug.lua(ZB开源工程中自带的程序,需要拷贝到当前目录。lualibs/mobdebug)
socket.lua(ZB开源工程中自带的程序,需要拷贝到当前目录。lualibs/ )
3.修改配置文件。
nginx.conf
worker_processes ${{NUM_WORKERS}};
error_log stderr notice;
daemon off;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
lua_package_path '/usr/home/coding/ide/zerob/lualibs/?/?.lua;/usr/home/coding/ide/zerob/lualibs/?.lua;;';
lua_package_cpath '/usr/home/coding/ide/zerob/bin/clibs/?.so;;';
server {
listen ${{PORT}};
lua_code_cache ${{CODE_CACHE}};
location / {
default_type text/html;
content_by_lua_file 'test.lua';
}
location /static/ {
alias static/;
}
location /favicon.ico {
alias static/favicon.ico;
}
}
}
lua_package_path和 lua_package_cpath,这两个变量是关键的,需要指向你实际ZB的目录。
lapis自动生成的工程配置文件中,location下面使用的是content_by_lua,直接运行lua语句
此处,我们直接引用lua文件,改用content_by_lua_file。
4.创建调试程序。
test.lua
require('mobdebug').start('127.0.0.1')
tmp_str = "Debug"
print("Lua Lapis")
ngx.say("Openresty")
require('mobdebug').done()
可以实现远程调试,很关健的一点就是引用了mobdebug.这个模块,这里的127.0.0.1就是openresty
服务运行地址。
5.起动IDE,执行调试。
我们IDE菜单上的project-> project directory-> choose选择打开,我们这个工程的目录,
选set from current file, 把工程中的test.lua作为当前要处理的文件。
下面关键的一点,在project 菜单里,一定要点选 “Start Debugger Server”。
图片:3.jpg
国为选中后,ZB就会在后面开一端口监听:
图片:4.jpg
注意这个8172就是为调试准备的。
图片:5.jpg
远行WEB服务:lapis server
图片:6.jpg
下面这张图,就回到了最开始的那张图。
图片:7.jpg
我们在浏览器中输入:127.0.0.1:8080
程序进入状态。
我们进入Remote console标签页,进行在线调试,直接使用openresy的库函数ngx.say
图片:8.jpg
单步下一句,把程序中的tmp_str的内容打到,openresty服务器的控制台上。
图片:9.jpg
图片:11.jpg
我们可以通过自己写一个函数,把输出重定向到文件里,看着更方便。
使用shit-enter,还可以进行多行输入代码输入。
我们结束调试,就会看到ngx.say打印的内容出现在网页上。
图片:12.jpg
下篇是如何用ZB在线调试Lua WEB程序。
PS:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。
致敬英文作者:Paul Kulchenko
http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio