首页 > 技术文章 > openresty lua 调试 (图文死磕)

crazymakercircle 2019-12-28 18:04 原文

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 :


推荐:入大厂 、做架构、大力提升Java 内功 的 精彩博文

入大厂 、做架构、大力提升Java 内功 必备的精彩博文 秋招涨薪1W + 必备的精彩博文
1:Redis 分布式锁 (图解-秒懂-史上最全) 2:Zookeeper 分布式锁 (图解-秒懂-史上最全)
3: Redis与MySQL双写一致性如何保证? (面试必备) 4: 面试必备:秒杀超卖 解决方案 (史上最全)
5:面试必备之:Reactor模式 6: 10分钟看懂, Java NIO 底层原理
7:TCP/IP(图解+秒懂+史上最全) 8:Feign原理 (图解)
9:DNS图解(秒懂 + 史上最全 + 高薪必备) 10:CDN图解(秒懂 + 史上最全 + 高薪必备)
11: 分布式事务( 图解 + 史上最全 + 吐血推荐 ) 12:限流:计数器、漏桶、令牌桶
三大算法的原理与实战(图解+史上最全)
13:架构必看:12306抢票系统亿级流量架构
(图解+秒懂+史上最全)
14:seata AT模式实战(图解+秒懂+史上最全)
15:seata 源码解读(图解+秒懂+史上最全) 16:seata TCC模式实战(图解+秒懂+史上最全)

SpringCloud 微服务 精彩博文
nacos 实战(史上最全) sentinel (史上最全+入门教程)
SpringCloud gateway (史上最全) 分库分表sharding-jdbc底层原理与实操(史上最全,5W字长文,吐血推荐)

推荐:尼恩Java面试宝典(持续更新 + 史上最全 + 面试必备)具体详情,请点击此链接

尼恩Java面试宝典,32个最新pdf,含2000多页不断更新、持续迭代 具体详情,请点击此链接

在这里插入图片描述


推荐: 地表最强 开发环境 系列

工欲善其事 必先利其器
地表最强 开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
地表最强 热部署:java SpringBoot SpringCloud 热部署 热加载 热调试
地表最强 发请求工具(再见吧, PostMan ):IDEA HTTP Client(史上最全)
地表最强 PPT 小工具: 屌炸天,像写代码一样写PPT
无编程不创客,无编程不创客,一大波编程高手正在疯狂创客圈交流、学习中! 找组织,GO

1 ZeroBrane 简介

ZeroBrane Studio已被用于调试各种Lua引擎 – 游戏框架(如Corona,Gideros,Moai,Love2d),家庭自动化设备,wirehark 脚本,Adobe Lightroom插件等 – 但是已经有几种Lua环境没有尝试过。其中一个是OpenResty / Nginx Lua脚本。OpenResty是一个基于nginx的网络应用服务器,一个非常快速的Web服务器,它提供了具有各种后端(Redis,Memcached,MySQL,HTTP服务器等)的非阻塞IO,并支持Lua作为其脚本语言。

ZeroBrane的特点:

  • 小巧,可移植,开源和跨平台(Windows,macOS和Linux);

  • 自动完成功能,关键字和自定义API;

  • 110多种语言和文件格式的语法高亮和折叠;

  • 具有自动刷新功能的项目视图,能够从列表中隐藏文件和目录;

  • 交互式控制台,用于测试本地和远程执行的Lua代码片段;

  • 集成调试器,支持本地和远程调试,包括跨平台和设备上调试;

  • 使用Lua, LÖVE, Gideros, Moai, Corona,GSL-Shell和其他Lua引擎进行实时编码 ;

  • 多语言支持,翻译为法语,西班牙语,俄语,德语,中文,世界语,意大利语,保加利亚语和巴西葡萄牙语语言和文档,以添加您自己的语言;

  • 50+扩展包在包库 ;

  • 模糊搜索的文件,符号,和库函数,函数的轮廓,和更多。

    下载地址: https://studio.zerobrane.com/

​ 疯狂创客圈的网盘,也提供本实例配置的版本下载。 疯狂创客圈网盘入口
在这里插入图片描述

2 调试的环境介绍

包括以下三个方面

  • openresty 的环境

  • project工程的环境

  • ZeroBrane Studio 的环境

  • lua 调试依赖包的配置

2.1 openresty 的环境

这里使用的是 openresty-1.13.6.2-win32 ,具体的安装和启动脚本,请参见 下面的博客:

windows openresty 死磕:安装和启动脚本

但是,一定要换成32位的版本。 然后,修改 openresty-start.bat 中对应的两个配置项。

修改完成后,使用openresty-start.bat 脚本,进行启动。
在这里插入图片描述

openresty-restart.bat 脚本,开发过程中会经常用到,因为每修改一次lua脚本,需要重新启动openresty/nginx ,重新进行加载。

2.2:lua project 工程的环境

大致按照下面的结构,组织 lua脚本的工程。 或者说nginx web项目的工程。
在这里插入图片描述

工程的目录,会在两个地方用到:

(1) openresty的 openresty-start.bat 脚本中

​ 具体请参见网盘的 openresty-start.bat 脚本 源码。

(2) 也会在 ZeroBrane Studio 的环境 用到

​ 会作为 ZeroBrane Studio 的工程目录。

2.2 准备调试脚本

调试的脚本为:luaScript/test.lua

--- 启动调试

local mobdebug = require("luaScript.initial.mobdebug");
mobdebug.start("192.168.0.5");

ngx.say("hello world.");
ngx.say("<hr>");
ngx.say(package.path);

local i=100;
ngx.say("<hr>");
ngx.say("i="..i);

mobdebug.done();

在conf/nginx.conf 文件, 配置好 luaScript/test.lua 对应的路径:

location /test {  
default_type 'text/html';  
charset utf-8; 
content_by_lua_file luaScript/test.lua;
}

2.3 ZeroBrane Studio 的工程目录

通过ZeroBrane Studio的file > new 菜单,打开 lua project 工程 所在的目录。
在这里插入图片描述

2.4 lua 调试依赖包的配置

将lua的依赖包路径,配置到 工程的 conf/nginx.conf 文件下:

(1) 项目的lua脚本路径

(2) ZeroBraneStudio-1.80 的lua脚本路径

(3) nginx的lua脚本路径

大致如下:

  # for windows
  lua_package_path "C:/dev/refer/LuaDemoProject/src/?.lua;E:/tool/ZeroBraneStudio-1.80/lualibs/?/?.lua;E:/tool/ZeroBraneStudio-1.80/lualibs/?.lua;E:/tool/openresty-1.13.6.2-win32/lualib/?.lua;;";
  
  lua_package_cpath "E:/tool/ZeroBraneStudio-1.80/bin/clibs/?.dll;E:/tool/openresty-1.13.6.2-win32/lualib/?.dll;;";

如果是linux环境,需 要进行相应的 路径,和文件类型的修改。上面的dll,在liux环境,需要改成so。

3 开始调试 lua

3.1 启动调试的服务器

启动ZeroBrane Studio(zbstudio.exe或zbstudio.sh)并启动调试服务器 ,菜单为 Project | Start Debugger Server。

在这里插入图片描述

3.2 启动调试的服务器

在浏览器输入lua脚本所配置的地址,如果: http://localhost/test

location /test {  
default_type 'text/html';  
charset utf-8; 
content_by_lua_file luaScript/test.lua;
}

ZeroBrane Studio会进入绿色箭头对应行的代码

3.3 查看运行时的变量值

使用watch工具,将需要查看的变量, 填入。 然后开始单步执行。 具体如下图

在这里插入图片描述

3.4 调试后的结果

程序调试完成后,可以在浏览器看到预期的结果。
在这里插入图片描述

3.5 调试快捷键

  • F10 下一行
  • Shift+F10 跳过调试
  • Ctrl +F10 跳过当前function
  • Shift + F5 终止运行
  • F6 运行
  • F5 debug运行

3.6 问题 :module socket.core 加载失败

如果出现以下问题:

2019/12/28 17:09:57 [error] 14568#13196: *1 lua entry thread aborted: runtime error: error loading module 'socket.core' from file 'E:/tool/ZeroBraneStudio-1.80/bin/clibs/socket\core.dll'

用一种可能就是使用了的64位的OpenResty,换成32位的OpenResty 即可。

疯狂创客圈的网盘,本文所涉及有的工具的安装文件,都有提供。


回到◀疯狂创客圈

疯狂创客圈 - Java高并发研习社群,为大家开启大厂之门

推荐阅读