代码之家  ›  专栏  ›  技术社区  ›  Ashley Davis

是否有一种方法可以确定从对处理“call”事件的调试挂钩的调用中传递给Lua函数的参数值?

lua
  •  4
  • Ashley Davis  · 技术社区  · 15 年前

    我已经编写了一个使用调试API的Lua脚本( debug.sethook )挂接呼叫和返回。我用它打印出一个格式很好的调用树,这对调试非常有用。

    在钩子处理函数中,我递增或递减一个全局变量 indentLevel debug.getinfo 获取有关调用函数的信息,并在当前缩进级别将其转储到stdout。

    对于“调用”事件,我还希望打印出传递给特定调用的参数值。大概我可以在钩子处理函数的C/C++实现中通过查看Lua堆栈来实现这一点。

    1 回复  |  直到 15 年前
        1
  •  1
  •   RBerteig Keith Adler    15 年前

    我想你需要的是 debug.getlocal . 从手册中:

    带索引的局部变量的值 功能级别的本地 局部变量有索引1,依此类推, 直到最后一个激活的局部变量。) 没有具有给定值的局部变量 debug.getinfo 检查 级别是有效的。)

    括号)表示内部 变量(回路控制变量, 临时变量和C函数局部变量)。

    我自己也没试过,但看起来它应该会告诉你你需要知道什么。有一件事我没有从文档中跳出来,那就是如何确定实际传递了多少个参数,但这可能是 debug.getinfo