- 本文固定链接: http://blog.sunqiang.me/2017/08/07/使用zerobrane-studio调试openresty和nginx-lua脚本/
- 转载请注明: sunny5156 2017年08月07日 于 技术人生-孙强 发表
ZeroBrane Studio已被用于调试各种Lua引擎 – 游戏框架(如Corona,Gideros,Moai,Love2d),家庭自动化设备,wirehark 脚本,Adobe Lightroom插件等 – 但是已经有几种Lua环境没有尝试过。其中一个是OpenResty / Nginx Lua脚本。OpenResty是一个基于nginx的网络应用服务器,一个非常快速的Web服务器,它提供了具有各种后端(Redis,Memcached,MySQL,HTTP服务器等)的非阻塞IO,并支持Lua作为其脚本语言。
我首先尝试使用OpenResty提供的非阻塞套接字API,但无法让调试工作,因为应该是阻塞的套接字调用返回的时间太早,这破坏了应用程序中的调试器与该IDE。根据OpenResty软件包的维护者Yichun Zhang(agentzh)的建议,我尝试使用与ZeroBrane Studio使用的Luasocket库相同的工具。这些是您可以遵循的步骤来尝试:
ZeroBrane Studio配置。
获得ZeroBrane Studio。这些说明适用于Windows,但调试也适用于Linux和OSX。
2.启动ZBS(zbstudio.exe或zbstudio.sh)并启动调试器Project | Start Debugger Server。
OpenResty配置。
我正在使用一个非常基本的配置(<NGINX>/conf/nginx.conf):
worker_processes 1;
events {
worker_connections 1024;
}
http {
lua_package_path ‘<ZBS>/lualibs/?/?.lua;<ZBS>/lualibs/?.lua;;’;
lua_package_cpath ‘<ZBS>/bin/clibs/?.dll;;’;
server {
location /hellolua {
default_type ‘text/plain’;
content_by_lua_file ‘lua/content.lua’;
}
}
}
确保替换<ZBS>为ZeroBrane Studio位置的实际路径。如果您正在OSX上运行,请更换?.dll,?.dylib如果您在Linux上运行,请bin/clibs/?.dll使用bin/linux/x86/clibs/?.so或bin/linux/x64/clibs/?.so取决于您的平台。
2.创建我们要debug(<NGINX>/lua/content.lua)的文件,可能如下所示:
require(‘mobdebug’).start(‘192.168.1.22’)
local name = ngx.var.arg_name or “Anonymous”
ngx.say(“Hello, “, name, “!”)
ngx.say(“Done debugging.”)
require(‘mobdebug’).done()
请注意,start()呼叫需要运行IDE的计算机的IP 。默认情况下使用“localhost”,但是由于您的nginx实例正在运行,因此您需要指定运行IDE的计算机的IP地址(在我的例子中192.168.1.22)。
3. <NGINX>/lua/content.lua在IDE中打开该文件(),并将项目目录设置为lua文件夹Project | Project Directory | Set From Current File。
脚本调试。
现在启动nginx并转到http:// localhost / hellolua。如果一切都正确,您应该看到ZeroBrane Studio被激活,绿色箭头指向第二行(类似于上面截图中可以看到的内容)。您现在可以设置断点,逐步执行代码,查看堆栈等。
您也可以转到远程控制台并在那里运行任何ngx命令。例如,如果您运行ngx.say(“Message from console”)(如屏幕截图所示),脚本完成后将在输出中看到此文本。
如果在开始调试时,如果您在Nginx日志中“尝试屈服于C调用边界”错误,请尝试使用更新的ZeroBrane Studio(0.70+),因为它包含几个改进,使调试能够与最新版本的OpenResty一起使用。
OpenResty配置进行远程调试。
只有在Nginx在一台机器上运行并且ZeroBrane Studio在另一台机器上运行时,如果您将OpenResty / Nginx配置为远程调试,则仅需要执行以下步骤。当您在同一台机器上运行时,Nginx正在使用ZeroBrane Studio附带的模块,因为它们被引用lua_package_path和引用lua_package_cpath。
1.复制调试器(mobdebug.lua)和套接字文件。去<ZBS>/lualibs/mobdebug/并复制mobdebug.lua到<NGINX>/lua/mobdebug.lua; 也复制<ZBS>/lualibs/socket.lua到<NGINX>/lua/。完成之后,lua文件夹的内容将如下所示:
./
content.lua
mobdebug.lua
socket.lua
2.复制<ZBS>/bin/clibs/socket/core.dll到<NGINX>/socket/core.dll(core.dylib和core.so文件也在bin文件夹中)。
你应该得到我的光滑ZeroBrane Studio IDE 的副本,并在 这里跟随我在Twitter上。