gpt4 book ai didi

lua - 有没有办法确定从调用处理 'call' 事件的调试 Hook 中传递给 Lua 函数的参数值?

转载 作者:行者123 更新时间:2023-12-04 21:21:24 32 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

This function returns the name and the value of the local variable with index local of the function at level level of the stack. (The first parameter or local variable has index 1, and so on, until the last active local variable.) The function returns nil if there is no local variable with the given index, and raises an error when called with a level out of range. (You can call debug.getinfo to check whether the level is valid.)

Variable names starting with '(' (open parentheses) represent internal variables (loop control variables, temporaries, and C function locals).



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

关于lua - 有没有办法确定从调用处理 'call' 事件的调试 Hook 中传递给 Lua 函数的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200385/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com