nginx 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 高并发实战》 面试必备 + 面试必备 + 面试必备

img
简介:
这里使用 Openresty 代替 nginx,使用基础nginx调试lua,方法也是一样的。

Openresty是基于nginx与lua的高性能web框架,继承了大量的高质量的lua库、第三方模块以及大多数依赖项。
目前对于lua主流开发工具有vscode+lua插件、IntelliJ IDEA+EmmyLua、ZeroBrane Studio、还有其他的一些文本编辑软件等。
lua作为一种脚本语言,除了开发简洁,性能优越之外,还应该具备调试功能,对于开发者才能算得上更加友好。

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/

​ 疯狂创客圈的网盘,也提供本实例配置的版本下载。 疯狂创客圈网盘入口
nginx lua 调试 - 死磕_第1张图片

2 调试的环境介绍

包括以下三个方面

  • openresty 的环境

  • project工程的环境

  • ZeroBrane Studio 的环境

  • lua 调试依赖包的配置

2.1 openresty 的环境

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

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

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

修改完成后,使用openresty-start.bat 脚本,进行启动。
nginx lua 调试 - 死磕_第2张图片

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

2.2:lua project 工程的环境

大致按照下面的结构,组织 lua脚本的工程。 或者说nginx web项目的工程。
nginx lua 调试 - 死磕_第3张图片

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

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

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

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

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

2.3 ZeroBrane Studio 的工程目录

通过ZeroBrane Studio的file > new 菜单,打开 lua project 工程 所在的目录。
nginx lua 调试 - 死磕_第4张图片

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。

2.5 准备调试脚本

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

--- 启动调试

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

ngx.say("hello world.");
ngx.say("
"); ngx.say(package.path); local i=100; ngx.say("
"); 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;
}

3 开始调试 lua

3.1 启动调试的服务器

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

nginx lua 调试 - 死磕_第5张图片

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工具,将需要查看的变量, 填入。 然后开始单步执行。 具体如下图

nginx lua 调试 - 死磕_第6张图片

3.4 调试后的结果

程序调试完成后,可以在浏览器看到预期的结果。
nginx lua 调试 - 死磕_第7张图片

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 高并发研习社群 【博客园 总入口 】


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

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

img


疯狂创客圈 Java 死磕系列

  • Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战
  • Netty 源码、原理、JAVA NIO 原理

  • Java 面试题 一网打尽

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


你可能感兴趣的:(java)