Q:在lua中创建一个hookfunction

Q:在lua中创建一个hookfunction,lua,Lua,我想为lua执行一个钩子函数: 对于explain,我希望在调用函数时钩住参数并返回参数,如下所示: function func1(x, y) print(tonumber(x) + tonumber(y)) end a = hookfunction(func1, function(...) -- a = old function local args = { ... } print("Argument 1 =>", args[1]) print("Argument

我想为lua执行一个钩子函数:

对于explain,我希望在调用函数时钩住参数并返回参数,如下所示:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

a = hookfunction(func1, function(...)    -- a = old function
  local args = { ... }
  print("Argument 1 =>", args[1])
  print("Argument 2 =>", args[2])
  return a(...)
end)

func1(12, 5)

你可以做两件不同的事。您可以仅为该函数创建包装器,也可以在Lua运行时中实际设置调试挂钩。下面是创建包装器的方法:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

function wrapfunction(a)    -- a = old function
  return function(...)
    local args = { ... }
    print("Argument 1 =>", args[1])
    print("Argument 2 =>", args[2])
    return a(...)
  end
end
func1 = wrapfunction(func1)

func1(12, 5)
下面是如何设置调试挂钩:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

function hookfunction(event)
  if debug.getinfo(2, 'f').func == func1 then
    print("Argument 1 =>", select(2, debug.getlocal(2, 1)))
    print("Argument 2 =>", select(2, debug.getlocal(2, 2)))
  end
end
debug.sethook(hookfunction, 'c')

func1(12, 5)

你可以做两件不同的事。您可以仅为该函数创建包装器,也可以在Lua运行时中实际设置调试挂钩。下面是创建包装器的方法:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

function wrapfunction(a)    -- a = old function
  return function(...)
    local args = { ... }
    print("Argument 1 =>", args[1])
    print("Argument 2 =>", args[2])
    return a(...)
  end
end
func1 = wrapfunction(func1)

func1(12, 5)
下面是如何设置调试挂钩:

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

function hookfunction(event)
  if debug.getinfo(2, 'f').func == func1 then
    print("Argument 1 =>", select(2, debug.getlocal(2, 1)))
    print("Argument 2 =>", select(2, debug.getlocal(2, 2)))
  end
end
debug.sethook(hookfunction, 'c')

func1(12, 5)
你可以试试这个

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

oldfunc1 = func1

function func1hook(x, y)
  print("Argument x =>", x)
  print("Argument y =>", y)
  return oldfunc1(x, y)
end

func1 = func1hook

func1(4,4)
我不确定它是否适用于C函数,但您可以试试。如果你想要更通用的钩子功能,这也是可能的

你可以试试这个

function func1(x, y)
  print(tonumber(x) + tonumber(y))
end

oldfunc1 = func1

function func1hook(x, y)
  print("Argument x =>", x)
  print("Argument y =>", y)
  return oldfunc1(x, y)
end

func1 = func1hook

func1(4,4)
我不确定它是否适用于C函数,但您可以试试。如果你想要更通用的钩子功能,这也是可能的