• 本文固定链接: 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

其他参考:

https://blog.csdn.net/lupengfei1009/article/details/86071905

https://www.cnblogs.com/zentel/p/6231021.html

使用ZeroBrane Studio调试OpenResty Lua脚本相关推荐

  1. redis之lua脚本: 原子性 调试 嵌入高级语言

    实验环境: redis: 6.0.9 redis执行lua脚本时, 出错不会回滚(rollback) 我们知道, 使用lua脚本可以在执行一串redis命令时, 实现一定原子性(lua脚本中多条指令执 ...

  2. Redis 中 Lua 脚本的应用和实践

    引言 前段时间组内有个投票的产品,上线前考虑欠缺,导致被刷票严重.后来,通过研究,发现可以通过 redis lua 脚本实现限流,这里将 redis lua 脚本相关的知识分享出来,讲的不到位的地方还 ...

  3. 使用OpenResty+Lua实现灰度测试(金丝雀)

    openresty.org/en/ 下载地址 如何安装部署不是本节内容 在实际项目中遇到重构或者新版本发布, 新老系统如何高效的切换,现目前的答案就是Gateway 网关,有很多开源的网关Kong A ...

  4. 如何使用ZEROBRANE STUDIO远程调试COCOS2D-X的LUA脚本

    http://www.cocos2d-x.org/docs/manual/framework/native/v2/lua/lua-remote-debug-via-zerobrane/zh ZeroB ...

  5. ZeroBrane Studio远程调试Cocos2d-x的Lua脚本

    测试环境 ZeroBrane Studio (0.39 for mac; MobDebug 0.542) Mac OS X 10.9 Xcode 5.01 1.将ZeroBrane Studio.ap ...

  6. 【备忘】visual studio调试状态下显示lua调用栈

    编辑文件:[VS安装目录]/Common7/Packages/Debugger/autoexp.dat,在文件最后[hresult]之上的空白插入以下代码,就可以在 visual studio调试的时 ...

  7. 利用Visual Studio调试JavaScript脚本

    大家如果用过JavaScript一定对它的调试感到很头痛吧,浏览器所返回给你的错误信息基本没有任何意义.一个很小的错误可能导致调试大半天,费时费力. 先说些废话= =b...昨天公布了研究生寝室分配结 ...

  8. 转--深入LUA脚本语言,让你彻底明白调试原理

    [原创声明] 如果觉得文章不错,请转发.分享给您的朋友 我会把十多年嵌入式开发中的项目实战经验进行总结.分享,相信不会让你失望的! 转载:欢迎转载,但未经作者同意,必须保留此段声明,必须在文章中给出原 ...

  9. Lua脚本语言快速入门手册

    学了两天Lua语言,感叹其短小精悍,上手极快,语法还很舒服,不错!整理下学习过程中经常用到的基础知识,共勉! Lua用法简述 Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式 ...

最新文章

  1. Gradle用户指南(章9:Groovy快速入门)
  2. Android makefile编译流程(二)
  3. mysql 存储过程已存在_sql存储过程实现 添加新用户,判断是否已存在
  4. 2021-09-26 关于打开Ubuntu的main universe restricted
  5. [转载] python通过反射执行代码
  6. 网件R8000路由器怎么云存储_给大姐姐换个“控制中心”——NETGEAR 网件 R7800 AC2600M 路由器 简晒_路由器...
  7. 大白话解析模拟退火算法、遗传算法
  8. 《JavaScript高级程序设计》- 第一章:介绍JavaScript
  9. 湖北工业大学计算机导论考试试题,湖北工业大学计算机二级考试时间
  10. 影片avi转rmvb教程
  11. vue 手写签名_真正的艺术签名!让你的名字充满明星范!
  12. 转行学IT为什么一定要趁早?
  13. Excel2007打开文件时,不显示内容,需要拖拽进去才能显示
  14. Python获取本机ip地址的两种有效方法
  15. arm汇编lr pc b bl ret指令函数调用和返回gif动图演示
  16. 网络爬虫学习第二弹:requests库的使用
  17. 第四章:3ds max样条线建模
  18. MySQL:一主两从架构(读写分离)
  19. pip显示网络不可达错误解决
  20. 延伸未来世界 看元宇宙风华

热门文章

  1. python怎么发音乐到朋友圈_只要三步,用Python轻松制作短视频,你也能在朋友圈傲娇一把!...
  2. 【Spring第四篇】DI注入以及c、p命名空间
  3. 797. 差分(有图解)
  4. HTML5新增input表单(HTML5)
  5. R语言CRAN软件包Meta分析 1
  6. python-斐波那契数列的计算
  7. 关于PHP代码写的下载文件打不开的问题,自己备忘!(韩老师2011年的例子)
  8. 极酷WIFI深度剖析免费WIFI
  9. Java获得不同格式的系统时间
  10. java中ssm付款代码_基于Java+SSM的网上订餐系统、基于JavaWeb的网上订餐系统