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/socket\core.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 调试 (图文死磕)

原文地址:https://www.cnblogs.com/crazymakercircle/p/12112568.html

时间: 2024-09-30 15:10:05

openresty lua 调试 (图文死磕)的相关文章

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

疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy-SpringCloud 微服务脚手架 &视频介绍: Crazy-SpringCloud 微服务脚手架,是为 Java 微服务开发 入门者 准备的 学习和开发脚手架.并配有一系列的使用教程和视频,大致如下: 高并发 环境搭建 图文教程和演示视频,陆续上线: 中间件 链接地址 Linux Redis

Reactor(死磕2)

[正文]netty源码  死磕2:  传说中神一样的Reactor反应器模式 本文目录 1. 为什么是Reactor模式 2. Reactor模式简介 3. 多线程IO的致命缺陷 4. 单线程Reactor模型 4.1. 什么是单线程Reactor呢? 4.2. 单线程Reactor的参考代码 4.3. 单线程模式的缺点: 5. 多线程的Reactor 5.1. 基于线程池的改进 5.2. 改进后的完整示意图 5.3. 多线程Reactor的参考代码 6. Reactor持续改进 7. Reac

死磕 java同步系列之StampedLock源码解析

问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWriteLock的对比? 简介 StampedLock是java8中新增的类,它是一个更加高效的读写锁的实现,而且它不是基于AQS来实现的,它的内部自成一片逻辑,让我们一起来学习吧. StampedLock具有三种模式:写模式.读模式.乐观读模式. ReentrantReadWriteLock中的读和写都是

死磕 java同步系列之redis分布式锁进化史

问题 (1)redis如何实现分布式锁? (2)redis分布式锁有哪些优点? (3)redis分布式锁有哪些缺点? (4)redis实现分布式锁有没有现成的轮子可以使用? 简介 Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 本章我们将介绍如何基于redis实现分布式锁,并把其实现的进化史从头到尾讲明白,以便大家在面试的时候能讲清楚

2015考研数学考前必须死磕的知识点

2015考研数学考前必须死磕的知识点 来源:跨考教育    划词:关闭划词   收藏 编辑点评:下文为2015年考研数学必须掌握的知识点的大汇总,供考生们参考.沪江考研为你及时整合各路干货复习资料,敬请关注. 第一章 函数.极限与连续 1.函数的有界性 2.极限的定义(数列.函数) 3.极限的性质(有界性.保号性) 4.极限的计算(重点)(四则运算.等价无穷小替换.洛必达法则.泰勒公式.重要极限.单侧极限.夹逼定理及定积分定义.单调有界必有极限定理) 5.函数的连续性 6.间断点的类型 7.渐近

【死磕Java并发】-----J.U.C之重入锁:ReentrantLock

此篇博客所有源码均来自JDK 1.8 ReentrantLock,可重入锁,是一种递归无阻塞的同步机制.它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大.灵活的锁机制,可以减少死锁发生的概率. API介绍如下: 一个可重入的互斥锁定 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大.ReentrantLock 将由最近成功获得锁定,并且还没有释放该锁定的线程所拥

lua调试的工具选择

最近看到一个关于vs的lua调试插件, 装了vs2012试了下, 忍不住发此文总结下lua各种调试工具 Decoda 这是现今地球上调试lua5.1最方便的工具, 没有之一. 强大的注入式调试, 性能极高.支持 挂接进程, 变量展开, 断点等各种日常所需. 早期的Decoda是收费工具, 因此质量非常高. Decoda现在已经停止开发并开源了, 调试lua5.2会crash. 源代码可以作为一种技术参考, 很多dll注入修改技术, 灰常牛X LuaStudio 比较优秀的调试工具(因为收费),

【死磕Java并发】-----Java内存模型之分析volatile

前篇博客[死磕Java并发]-–深入分析volatile的实现原理 中已经阐述了volatile的特性了: volatile可见性:对一个volatile的读,总可以看到对这个变量最终的写: volatile原子性:volatile对单个读/写具有原子性(32位Long.Double),但是复合操作除外,例如i++; JVM底层采用"内存屏障"来实现volatile语义 下面LZ就通过happens-before原则和volatile的内存语义两个方向介绍volatile. volat

死磕,死磕死磕

坚持就能看到希望,遇到问题,有时候就是要死磕,才能慢慢看到希望.甚至是,一天之内经历希望,又绝望,如此反复. 早上,赖在床上一个小时,还是没有起来去锻炼,如果只是想的话,这一个小时我已经把一天的事情全部做完.说说上午做的事情.主要就是理解了Intel以前的tick-tock,处理器更新节奏,也就是滴答,一个tick,主要更新一下制程,比如从32nm到22nm,一个tock就是主要更新架构,不过到了后摩尔时代,就变成了三步走的战略,tick.tock.优化,比如最近刚出的七代core kabyla