使用ZeroBrane远程在线调试Openresty, Nginx的Lua程序

2.5k 词

作者:糖果

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
1.jpg

这是运行起来的ZB界面,这个已经进入的调试工作状态。

2.创建一个Lapis工程,使用如下的命令:

lapis new

关于lapis更具体工程创建,也可以参考别一篇文章。

图片:2.png
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
3.jpg

国为选中后,ZB就会在后面开一端口监听:

图片:4.jpg
4.jpg

注意这个8172就是为调试准备的。

图片:5.jpg
5.jpg

远行WEB服务:lapis server

图片:6.jpg
6.jpg

下面这张图,就回到了最开始的那张图。

图片:7.jpg
7.jpg

我们在浏览器中输入:127.0.0.1:8080

程序进入状态。

我们进入Remote console标签页,进行在线调试,直接使用openresy的库函数ngx.say

图片:8.jpg
8.jpg

单步下一句,把程序中的tmp_str的内容打到,openresty服务器的控制台上。

图片:9.jpg
9.jpg

图片:11.jpg
11.jpg

我们可以通过自己写一个函数,把输出重定向到文件里,看着更方便。

使用shit-enter,还可以进行多行输入代码输入。

我们结束调试,就会看到ngx.say打印的内容出现在网页上。

图片:12.jpg
12.jpg

下篇是如何用ZB在线调试Lua WEB程序。

PS:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。

致敬英文作者:Paul Kulchenko

http://notebook.kulchenko.com/zerobrane/debugging-openresty-nginx-lua-scripts-with-zerobrane-studio