openresty lua 调试 (图文死磕)

Posted crazymakercircle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openresty lua 调试 (图文死磕)相关的知识,希望对你有一定的参考价值。

疯狂创客圈 Java 高并发【 亿级流量聊天室实战】实战系列 【博客园总入口

架构师成长+面试必备之 高并发基础书籍 【Netty Zookeeper Redis 高并发实战


前言

Crazy-SpringCloud 微服务脚手架 &视频介绍

Crazy-SpringCloud 微服务脚手架,是为 Java 微服务开发 入门者 准备的 学习和开发脚手架。并配有一系列的使用教程和视频,大致如下:

高并发 环境搭建 图文教程和演示视频,陆续上线:

中间件 链接地址
Linux Redis 安装(带视频) Linux Redis 安装(带视频)
Linux Zookeeper 安装(带视频) Linux Zookeeper 安装, 带视频
Windows Redis 安装(带视频) Windows Redis 安装(带视频)
RabbitMQ 离线安装(带视频) RabbitMQ 离线安装(带视频)
ElasticSearch 安装, 带视频 ElasticSearch 安装, 带视频
Nacos 安装(带视频) Nacos 安装(带视频)

疯狂创客圈 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 面试必备 + 面试必备

技术图片
简介:

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/socketcore.dll'

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

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

具体,请关注 Java 高并发研习社群博客园 总入口


最后,介绍一下疯狂创客圈:疯狂创客圈,一个Java 高并发研习社群博客园 总入口

疯狂创客圈,倾力推出:面试必备 + 面试必备 + 面试必备 的基础原理+实战 书籍 《Netty Zookeeper Redis 高并发实战

技术图片


疯狂创客圈 Java 死磕系列

  • Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战

  • Netty 源码、原理、JAVA NIO 原理
  • Java 面试题 一网打尽

  • 疯狂创客圈 【 博客园 总入口 】
    R0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTQ4NTM5OC8yMDE5MDgvMTQ4NTM5OC0yMDE5MDgyMjIyNTE1NjQyNy05NTY0MjQxMjQuanBn?x-oss-process=image/format,png)


以上是关于openresty lua 调试 (图文死磕)的主要内容,如果未能解决你的问题,请参考以下文章

使用ZeroBrane调试OpenResty Lua脚本

使用lua-resty-repl 调试openresty

openresty+lua在反向代理服务中的玩法

openresty+lua在反向代理服务中的玩法

Nginx视频教程 反向代理/https/openresty/lua实战

死磕nginx系列--使用upsync模块实现负载均衡