【发布时间】:2020-06-13 15:21:39
【问题描述】:
当我为调试脚本执行 debug.getinfo 时,它会在 func 字段中返回一个十六进制数字的函数:
function: 0xa02c196dd610cfa6,
我想知道十六进制中的函数是什么以及如何将调试库与这些函数一起使用。
【问题讨论】:
当我为调试脚本执行 debug.getinfo 时,它会在 func 字段中返回一个十六进制数字的函数:
function: 0xa02c196dd610cfa6,
我想知道十六进制中的函数是什么以及如何将调试库与这些函数一起使用。
【问题讨论】:
如this 页面所示,debug.getinfo 返回的是一个表,而不是一个函数。
debug.getinfo 返回的表包含给定函数的名称等信息,如果可以找到的话;给定函数的当前行;以及上值的数量,即给定函数可以访问的局部变量的数量。这些是调试时的重要信息。
要检查debug.getinfo 返回的表中包含的信息,请尝试以下代码:
function foo()
-- `1' refers to the current layer of the call stack, that is, this very function.
return debug.getinfo(1)
end
t = foo()
for k, v in pairs(foo) do
print(k, v)
end
另外,关于你关于函数的十六进制地址的问题:鉴于 Lua 是一种内存安全语言——也就是说它不允许直接访问内存——拥有函数的地址意味着小的。函数在内存中占用一定的空间,函数的十六进制地址是指它在内存中占用的第一个字节。在 Lua 中,函数是一等变量,这意味着它们可以像数字、字符串等一样被传递;因此,与 C/C++ 和类似语言不同,没有函数指针。因此,函数的十六进制地址不允许你做任何特别的事情。
【讨论】: