当前位置: 首页 > news >正文

Lua学习笔记:debug.sethook函数

前言
本篇在讲什么

使用Lua的debug.setHook函数
本篇需要什么

Lua语法有简单认知
依赖Sublime Text工具

本篇的特色

具有全流程的图文教学
重实践,轻理论,快速上手
提供全流程的源码内容


★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈

目录

  • ♠ 前言
  • ♠ sethook
    • ♥ 注册函数执行时触发的钩子
    • ♥ 注册函数返回时触发的钩子
    • ♥ 注册执行新一行代码时触发的钩子
    • ♥ 注册根据指令数触发的钩子
  • ♠ 推送
  • ♠ 结语


♠ 前言

重点了解一下debug.sethook函数


♠ sethook

将一个函数作为钩子注册起来,符合指定逻辑的时候会被调用

其原型函数为定义在c源码ldblib.c中的db_sethook函数,如下图所示

在这里插入图片描述

其一共三个参数,在lua中的使用如下所示

local count = 0
local mask = "crl"
local func = function()
enddebug.sethook(func, mask, count)

参数1:func被注册的函数
参数2:钩子掩码,有三个参数可供选择

  • c: 每次Lua调用函数时都会调用该钩子
  • r: 每次Lua从函数返回时都会调用该钩子
  • l: 每次Lua进入新一行代码时,都会调用该钩子

参数3:钩子在每次count指令之后被调用

注意:参数2可以使用拼接字符,例如"crl"


♥ 注册函数执行时触发的钩子

我们注册一个在每次函数调用后都会备执行的钩子,代码如下所示,钩子掩码设置为c,测试函数testFunc调用几次,钩子就被执行几次

在这里插入图片描述


♥ 注册函数返回时触发的钩子

我们用相同的代码,只不过钩子掩码改成了r,我们发现在触发自定义函数返回前会有默认三次触发,可能是一些内置函数之类的吧,这里先不往深处追了,除此之外没执行完一次函数调用一次触发

在这里插入图片描述


♥ 注册执行新一行代码时触发的钩子

掩码l在执行新一行代码的时候会触发钩子,可以直接用函数print打印出来对应行号

在这里插入图片描述


♥ 注册根据指令数触发的钩子

当第三个参数不等于1,且第二个参数为空字符串的时候,此时第三个参数的数量,执行指定命令后调用钩子

在这里插入图片描述


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

👉 本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处👈

相关文章:

Lua学习笔记:debug.sethook函数

前言 本篇在讲什么 使用Lua的debug.setHook函数 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ 👉 ♠ 一级标题 &…...

信息化发展74

产业数字化 产业数字化是指在新一代数字科技支撑和引领下,以数据为关键要素,以价值释放为核心,以数据赋能为主线,对产业链上下游的全要素数字化升级、转型和再造的过程。产业数字化作为实现数字经济和传统经济深度融合发展的重要…...

Go-Ldap-Admin | openLDAP 同步钉钉、企业微信、飞书组织架构实践和部分小坑

目录 一、Docker-compose快速拉起demo测试环境 二、原生部署流程 安装MySQL:5.7数据库 安装openLDAP 修改域名,新增con.ldif 创建一个组织 安装OpenResty 下载后端 下载前端 部署后端 部署前端 三、管理动态字段 钉钉 企业微信 飞书 四、…...

elasticsearch+logstash+kibana整合(ELK的使用)第一课

一、安装elasticsearch 0、创建目录,统一放到/data/service/elk 1、下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-linux-x86_64.tar.gz2、解压 tar -xzvf elasticsearch-7.1.0-linux-x86_64.tar.gz3、新建用户和组…...

宝塔 php修改了php.ini配置不生效

最近在使用hypref,php的版本是7.4 服务器linux,用宝塔安装完php,并装完swoole插件后 安装了swoole后,需要在php.ini中修改一下配置文件 添加 swoole.use_shortnameOff 但是添加了,重启php,依然不生效 解决方法是: 同时…...

Unrecognized option ‘stream_loop‘.(版本不匹配,利用make编译安装)

执行如下命令: ffmpeg -re -stream_loop -1 -i 1.mp4 -vcodec copy -acodec copy -f rtsp -rtsp_transport tcp rtsp://localhost:8554/live1.sdp报如下错误:Unrecognized option ‘stream_loop’. 查看ffmpeg版本:ffmpeg -version 显示&am…...

【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(2,常见的二维随机变量及二维变量的条件分布和独立性)

文章目录 引言四、常见的二维随机变量4.1 二维均匀分布4.2 二维正态分布 五、二维随机变量的条件分布5.1 二维离散型随机变量的条件分布律5.2 二维连续型随机变量的条件分布 六、随机变量的独立性6.1 基本概念6.2 随机变量独立的等价条件 写在最后 引言 有了上文关于二维随机变…...

力扣 -- 10. 正则表达式匹配

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:bool isMatch(string s, string p) {int ms.size();int np.size();//处理后续映射关系s s;//处理后续映射关系p p;vector<vector<bool>> dp(m1,vector<bool>(n1));//初始化dp[0][0]true…...

Spring源码分析(四) Aop全流程

一、Spring AOP基础概念 1、基础概念 连接点(Join point)&#xff1a;能够被拦截的地方&#xff0c;Spring AOP 是基于动态代理的&#xff0c;所以是方法拦截的&#xff0c;每个成员方法都可以称之为连接点&#xff1b;切点(Poincut)&#xff1a;每个方法都可以称之为连接点&…...

定义现代化实时数据仓库,SelectDB 全新产品形态全面发布

导读&#xff1a;9 月 25 日&#xff0c;2023 飞轮科技产品发布会在线上正式召开&#xff0c;本次产品发布会以 “新内核、新图景” 为主题&#xff0c;飞轮科技 CEO 马如悦全面解析了现代化数据仓库的演进趋势&#xff0c;宣布立足于多云之上的 SelectDB Cloud 云服务全面开放…...

Linux系统编程(七):线程同步

参考引用 UNIX 环境高级编程 (第3版)黑马程序员-Linux 系统编程 1. 同步概念 所谓同步&#xff0c;即同时起步、协调一致。不同的对象&#xff0c;对 “同步” 的理解方式略有不同 设备同步&#xff0c;是指在两个设备之间规定一个共同的时间参考数据库同步&#xff0c;是指让…...

Arcgis克里金插值报错:ERROR 999999: 执行函数时出错。 表名无效。 空间参考不存在。 ERROR 010429: GRID IO 中存在错误

ERROR 999999: 执行函数时出错。 问题描述 表名无效。 空间参考不存在。 ERROR 010429: GRID IO 中存在错误: WindowSetLyr: Window cell size does not match layer cell size. name: c:\users\lenovo\appdata\local\temp\arc2f89\t_t164, adepth: 32, type: 1, iomode: 6, …...

【网络协议】ARP协议

为什么网络需要同时借助MAC地址这种物理地址和IP地址这种逻辑地址进行通信&#xff1f; 尽管目前MAC地址可以通过逻辑的方式进行修改&#xff0c;但它最初是被设计为不可人为更改的硬件地址。虽然MAC地址也可以满足唯一性的要求&#xff0c;但由于它不可由管理员根据需求通过逻…...

安防视频/集中云存储平台EasyCVR(V3.3)部分通道显示离线该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

软件测试经典面试题:如何进行支付功能的测试?

非现金支付时代&#xff0c;非现金支付已经成为了生活不可或缺的一部分&#xff0c;我们只需要一台手机便可走遍全国各地&#xff08;前提是支付宝&#xff0c;微信有钱<00>&#xff09;,那么作为测试人员&#xff0c;支付测试也是非常重要的一环&#xff0c;那么下面我就…...

SolidWorks 入门笔记03:生成工程图和一键标注

默认情况下&#xff0c;SOLIDWORKS系统在工程图和零件或装配体三维模型之间提供全相关的功能&#xff0c;全相关意味着无论什么时候修改零件或装配体的三维模型&#xff0c;所有相关的工程视图将自动更新&#xff0c;以反映零件或装配体的形状和尺寸变化&#xff1b;反之&#…...

【Java】对象内存图多个对象同一内存地址

目录 学生类 单个对象内存图 多个对象指向同一个内存地址 学生类 Student.java如下&#xff1a; package com.面向对象;public class Student {String name;int age;public void work() {System.out.println("开始敲代码...");} }StudentDemo.java如下&#xff…...

Python 笔记05(装饰器的使用)

一 装饰器的使用 (property) property 是 Python 中用于创建属性的装饰器。它的作用是将一个类方法转换为类属性&#xff0c;从而可以像 访问属性一样访问该方法&#xff0c;而不需要使用函数调用的语法。使用 property 主要有以下好处&#xff1a; 封装性和隐藏实现细节&…...

记忆化搜索,901. 滑雪

901. 滑雪 - AcWing题库 给定一个 R 行 C 列的矩阵&#xff0c;表示一个矩形网格滑雪场。 矩阵中第 i行第 j 列的点表示滑雪场的第 i 行第 j列区域的高度。 一个人从滑雪场中的某个区域内出发&#xff0c;每次可以向上下左右任意一个方向滑动一个单位距离。 当然&#xff0…...

计算机网络:连接世界的纽带

计算机网络的基础概念 计算机网络是一组相互连接的计算机&#xff0c;它们通过通信链路和协议进行数据交换和资源共享。以下是一些关键概念&#xff1a; 1. 节点和主机 网络中的计算机设备称为节点&#xff0c;通常是主机或服务器。主机是普通用户或终端设备&#xff0c;而服…...

VMware性能分配实战:CPU、内存与存储的黄金比例

1. VMware性能分配的核心逻辑 第一次用VMware创建虚拟机时&#xff0c;很多人会直接套用默认配置——比如给Windows 10分配4GB内存、2个vCPU。但当我同时启动3个这样的虚拟机时&#xff0c;宿主机16GB内存瞬间被吃光&#xff0c;而CPU利用率却只有30%。这个现象揭示了VMware资源…...

告别乱码!用CMD批量转换文本换行符时如何保持GBK/UTF-8编码(附错误排查指南)

告别乱码&#xff01;用CMD批量转换文本换行符时如何保持GBK/UTF-8编码&#xff08;附错误排查指南&#xff09; 当你在Windows环境下处理来自不同操作系统的文本文件时&#xff0c;最令人头疼的问题莫过于换行符差异导致的格式混乱和编码转换引发的乱码。特别是对于数据分析师…...

电商老板必看:用Excel的IF和VLOOKUP函数,轻松算出你的新老客户利润贡献比

电商精细化运营&#xff1a;用Excel透视新老客户利润贡献的实战指南 对于中小电商企业主来说&#xff0c;理解客户结构是精细化运营的第一步。你可能没有专业的BI工具&#xff0c;但Excel这个看似普通的办公软件&#xff0c;却能帮你挖掘出惊人的商业洞察。本文将带你一步步构建…...

前端新手入门:跟快马AI学用localStorage实现视频续播功能

今天想和大家分享一个特别适合前端新手练手的小项目&#xff1a;用localStorage实现视频续播功能。这个功能我们平时在各大视频网站都能见到&#xff0c;比如"继续观看"的提示&#xff0c;其实实现起来并不复杂&#xff0c;但涉及了前端开发中几个非常实用的知识点。…...

Qwen-Ranker Pro实操手册:审计日志记录+敏感Query过滤中间件集成

Qwen-Ranker Pro实操手册&#xff1a;审计日志记录敏感Query过滤中间件集成 1. 引言&#xff1a;为什么你的搜索系统需要一个“质检员”&#xff1f; 想象一下这个场景&#xff1a;你搭建了一个智能客服系统&#xff0c;用户问“如何给猫洗澡”&#xff0c;系统却返回了一堆关…...

终极指南:SimpleNES如何通过数学魔法还原经典NES音效

终极指南&#xff1a;SimpleNES如何通过数学魔法还原经典NES音效 【免费下载链接】SimpleNES An NES emulator in C 项目地址: https://gitcode.com/gh_mirrors/si/SimpleNES SimpleNES是一款用C编写的NES模拟器&#xff0c;它不仅能精确模拟NES游戏机的图形显示&#x…...

COMSOL 钢制支架静态分析:从建模到结果解析

comsol支架-静态分析&#xff0c; COMSOL Multiphysics 和“结构力学模块”中对结构力学问题进行建模的基本原理及操作。 介绍线性静态分析&#xff0c;包括材料属性和边界条件的定义。 在计算出解之后&#xff0c;学习如何分析结果并检查反作用力。 模型是钢制支架。 这种支架…...

SiameseUIE保姆级教程:3步部署nlp_structbert_siamese-uie_chinese-base

SiameseUIE保姆级教程&#xff1a;3步部署nlp_structbert_siamese-uie_chinese-base 信息抽取不再需要标注数据&#xff0c;一个模型搞定NER、关系抽取、事件抽取、情感分析四大任务 1. 什么是SiameseUIE&#xff1f;为什么值得一试 如果你正在处理中文文本信息抽取任务&#…...

Free Texture Packer深度解析:高效纹理打包方案的最佳实践

Free Texture Packer深度解析&#xff1a;高效纹理打包方案的最佳实践 【免费下载链接】free-tex-packer Free texture packer 项目地址: https://gitcode.com/gh_mirrors/fr/free-tex-packer 在游戏开发和网页性能优化领域&#xff0c;纹理打包技术是解决资源加载效率瓶…...

通达信数据获取革新:用MOOTDX构建极简股票分析系统全攻略

通达信数据获取革新&#xff1a;用MOOTDX构建极简股票分析系统全攻略 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资与金融数据分析领域&#xff0c;开发者常面临数据获取的三重困境&a…...