debug.sethook()

#!/usr/bin/env lua

function foo(x)
  print("in foo()", x)
end

debug.sethook(foo, "c")

print("0")
foo()
print("1")
foo()
print("2")

debug.sethook()
print("3")
foo()
print("4")

で、

in foo()        call
in foo()        call
0
in foo()        call
in foo()        call
in foo()        call
in foo()in foo()        call
        nil
in foo()        call
in foo()        call
1
in foo()        call
in foo()        call
in foo()        call
in foo()in foo()        call
        nil
in foo()        call
in foo()        call
2
in foo()        call
3
in foo()        nil
4
#!/usr/bin/env lua

function foo(x)
  print("in foo()", x)
end

debug.sethook(foo, "r")

print("0")
foo()
print("1")
foo()
print("2")

debug.sethook()
print("3")
foo()
print("4")

で、

in foo()        return
in foo()        return
0
in foo()        return
in foo()        return
in foo()in foo()        return
        nil
in foo()        return
in foo()        return
in foo()        return
1
in foo()        return
in foo()        return
in foo()in foo()        return
        nil
in foo()        return
in foo()        return
in foo()        return
2
in foo()        return
3
in foo()        nil
4
#!/usr/bin/env lua

function foo(x, y)
  print("in foo()", x, y)
end

debug.sethook(foo, "l")

print("0")
foo()
print("1")
foo()
print("2")

debug.sethook()
print("3")
foo()
print("4")

で、

0
in foo()        line    10
in foo()        line    4
in foo()        nil     nil
in foo()        line    5
in foo()        line    11
1
in foo()        line    12
in foo()        line    4
in foo()        nil     nil
in foo()        line    5
in foo()        line    13
2
in foo()        line    15
3
in foo()        nil     nil
4