24.2 hooks

翻译 2013年12月05日 16:33:29
Hook机制的作用:一个运行程序执行某个事件时,会调用我们注册过的相应的函数。有四种事件可以触发一个hook:
  • 调用事件(call):当Lua调用一个函数时发生;
  • 返回事件(return):当一个函数返回时发生;
  • 行事件(line):当Lua执行一行新的代码时发生
  • 计数事件(count):在执行完给定的指令条数之后发生
Lua用一个参数调用hook,就是用一个字符串表示事件:“call”(或者"tail call"),“return”,“line”或者“count”。对于行事件,函数需要第二个参数“一个新行号”。为了得到hook里面更多的信息,我们要用debug.getinfo。

通过调用debug.sethook来注册一个hook,函数有两到三个参数:第一个参数是被hook的函数;第二个参数是一个遮掩吗字符串,用于表示我们要监视的事件;第三个可选参数是一个数字,表示监视的频率(译者注:即多久监视一次)。为了监视调用、返回、行事件,我们在第二个遮掩码字符串中用('c', 'r', 'l')首字母表示。为了监视计数事件,我们只需提供一个计数器当做第三个参数。无参数的调用sethook,既可以关闭hook。

下面有一个简单的例子,在一个函数内安装一个简单的跟踪器,当Lua解析器执行每一行时,Lua会调用print输出当前的行号。
 debug.sethook(print, "l")

这个函数print安装成hook函数,当Lua执行行事件时候,通知Lua调用print。下面提供一个复杂的跟踪器,在函数里面使用getinfo得到当前的文件名:
function trace(event, line)
     local s = debug.getinfo(2).short_src
     print(s .. " : " .. line)
end

debug.sethook(trace, "l")

(译者注:当Lua执行一行代码时,此时发生了行事件,Lua会调用我们的注册函数用于处理行事件,Lua传给处理函数两个参数:line和行号。)
一个很有用的函数debug.debug()可以和hook结合使用。这个函数输出一个提示符等待用于输入Lua命令。debug.debug()的功能大致如下:
function debug1()
     while true do
          io.write("debug>")
          local line = io.read()
          if line == "cont" then break end
          assert(load(line))()
     end
end

(-----
译者注:debug.debug()的使用方法,输入cont跳出一个debug()。有点像单步调试
function trace(event, line)
     local s = debug.getinfo(1).short_src
     print(s .. " : " .. line)
     debug.debug()
end

debug.sethook(trace, "l")

a = 100
print("11")
print("22")
print("33")
)-----

svn的hooks使用

之前没有太细的玩过svn,我记得之前找到过一种类似于hooks钩子的东西原理是将svn与apache勾搭起来,说白了就是让apache的默认账号作为svn的账号,然后在apache的加载模块中引用sv...
  • u010447573
  • u010447573
  • 2015年10月30日 15:17
  • 627

HOOKS的详细介绍!

hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。 下面将介绍WINNDOWS HOOKS并且说明如何在WINDOWS 程序中...
  • u010258235
  • u010258235
  • 2013年08月21日 15:40
  • 1470

13、Hooks(基础知识)

Hooks介绍Cordova Hooks提供使用应用程序添加特定脚本或者插件甚至你自己编译系统的自定义命令。...
  • zzh_receive
  • zzh_receive
  • 2016年11月17日 21:40
  • 1620

Git Hooks实现开发部署任务自动化

[转]使用Git Hooks实现开发部署任务自动化 提供:ZStack社区 前言 版本控制,这是现代软件开发的核心需求之一。有了它,软件项目可以安全的跟踪代码变更并执行回溯、完整性检查、协同开...
  • Richard_Jason
  • Richard_Jason
  • 2016年11月16日 16:44
  • 3696

关于SVN Hooks(钩子)的使用

tags:svn,hooks,svn钩子,Tortoisesvn钩子   由于工作需要,在svn中经常需要使用到svn hooks,把一些常用的记录在这里。   1.什么是svn hooks?...
  • socoldinxian
  • socoldinxian
  • 2013年09月01日 21:26
  • 4934

使用Git Hooks实现开发部署任务自动化

转自 http://blog.csdn.net/zstack_org/article/details/53100257 前言 版本控制,这是现代软件开发的核心需求之一...
  • skykingf
  • skykingf
  • 2016年11月14日 17:39
  • 2494

git创建远程仓库以及hooks的配置

git 远程仓库 hooks
  • chao821
  • chao821
  • 2016年10月28日 21:26
  • 2667

ANT发布SVN WEB项目到TOMCAT以及利用post-commit自动提交编译更新

开发人员在本地提交更新到 SVN 服务器后,往往需要测试人员重新测试。为了将更新内容即时反映到测试服务器,可以利用 post-commit 脚本将 SVN 更新同步到测试服务器中。 ( 1 )利...
  • clyao_123456
  • clyao_123456
  • 2015年05月20日 18:56
  • 766

svn利用hooks自动更新远程服务器上的项目

项目开发阶段往往需要频繁的提交代码,如果不加svn钩子的话,每次提交都要到项目目录下执行一下svn up,非常费事,所以今天决定加个把钩子做上。利用钩子更新远程项目的关键是实现ssh无密码登录。 ...
  • huo_shaonan
  • huo_shaonan
  • 2016年04月24日 15:06
  • 1738

gitlab push代码通过webhooks自动触发jenkins构建设置

1、环境设置:jenkins及gitlab安装好 2、jekins安装插件Gitlab Hook Plugin 3、配置jenkins job,如下: 4.登录gitlab找到相应项目,编辑添加...
  • guanshulixiao
  • guanshulixiao
  • 2017年07月27日 10:30
  • 1538
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:24.2 hooks
举报原因:
原因补充:

(最多只允许输入30个字)