我编写了一个Lua脚本,它使用调试API(debug.sethook
)来挂钩调用和返回。我用它来打印出一个格式很好的调用树 - 这对调试非常有用。
在钩子处理程序函数中,我根据事件是“调用”还是“返回”(或“尾部返回”)来增加或减少全局indentLevel
变量。然后我使用debug.getinfo
获取有关调用函数的信息,并将其转储到当前缩进级别的stdout。
对于'call'事件,我还想打印出传递给特定调用的参数值。据推测,我可以通过查看Lua堆栈在钩子处理程序函数的C / C ++实现中完成此操作。
有没有人知道是否有办法从Lua中的调试处理函数中确定参数值?
答案 0 :(得分:1)
我认为你需要的是debug.getlocal
。从手册:
此函数返回名称和 带索引的局部变量的值 级别功能的本地 堆栈。 (第一个参数或 局部变量的索引为1,依此类推, 直到最后一个活动的局部变量。) 如果存在,函数返回nil 没有给定的局部变量 index,并在调用时引发错误 水平超出范围。 (您可以 致电
debug.getinfo
检查是否 级别有效。)以'('开头的变量名称 括号)代表内部 变量(循环控制变量, 临时和C函数本地人。)
我自己没有尝试过,但它看起来应该揭示你需要知道的东西。从文档中没有跳出来的一件事是如何确定实际传递了多少参数,但这可能是debug.getinfo
揭示的琐事之一。