有没有办法确定在调用处理'call'事件的调试钩子时传递给Lua函数的参数值?

时间:2009-07-29 13:43:56

标签: lua

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

在钩子处理程序函数中,我根据事件是“调用”还是“返回”(或“尾部返回”)来增加或减少全局indentLevel变量。然后我使用debug.getinfo获取有关调用函数的信息,并将其转储到当前缩进级别的stdout。

对于'call'事件,我还想打印出传递给特定调用的参数值。据推测,我可以通过查看Lua堆栈在钩子处理程序函数的C / C ++实现中完成此操作。

有没有人知道是否有办法从Lua中的调试处理函数中确定参数值?

1 个答案:

答案 0 :(得分:1)

我认为你需要的是debug.getlocal。从手册:

  

此函数返回名称和   带索引的局部变量的值   级别功能的本地   堆栈。 (第一个参数或   局部变量的索引为1,依此类推,   直到最后一个活动的局部变量。)   如果存在,函数返回nil   没有给定的局部变量   index,并在调用时引发错误   水平超出范围。 (您可以   致电debug.getinfo检查是否   级别有效。)

     

以'('开头的变量名称   括号)代表内部   变量(循环控制变量,   临时和C函数本地人。)

我自己没有尝试过,但它看起来应该揭示你需要知道的东西。从文档中没有跳出来的一件事是如何确定实际传递了多少参数,但这可能是debug.getinfo揭示的琐事之一。