2021-12-18 · 学动漫、设计、电竞、电商、短视频、软件等
第一:一组特殊的函数接口以及钩子,这组接口可用于构建出不同的调试器、性能剖析器、 或是其它需要从解释器获取“内部信息”的工具
1.1Lu a 没有内置的调试机制。 但是它提供了一组特殊的函数接口以及 钩子。 这组接口可用于构建出不同的调试器、性能剖析器、 或是其它需要从解释器获取“内部信息”的工具。
这是一个携带有有关函数或活动记录的各种信息的结构。 lu a_getstack 只会填充结构的私有部分供后面使用。 调用 lu a_getinfo 可以在 lu a_Debug 中填充那些可被使用的信息域。
下面对 lu a_Debug 的各个域做一个说明:
1.2创建这个函数的代码块的名字。 如果 source 以 '@' 打头, 指这个函数定义在一个文件中,而 '@' 之后的部分就是文件名。 若 source 以 '=' 打头, 剩余的部分由用户行为来决定如何表示源码。 其它的情况下,这个函数定义在一个字符串中, 而 source 正是那个字符串。
short_src: 一个“可打印版本”的 source ,用于出错信息。
1.3 linedefined: 函数定义开始处的行号。
1.4 lastlinedefined: 函数定义结束处的行号。
参数:what: 如果函数是一个 Lua 函数,则为一个字符串 "Lua" ; 如果是一个 C 函数,则为 "C"; 如果它是一个代码块的主体部分,则为 "main
currentline: 给定函数正在执行的那一行。 当提供不了行号信息的时候, currentline 被设为 -1
1.5 name: 给定函数的一个合理的名字。 因为 Lua 中的函数是一等公民, 所以它们没有固定的名字: 一些函数可能是全局复合变量的值, 另一些可能仅仅只是被保存在一张表的某个域中。 lua_getinfo 函数会检查函数是怎样被调用的, 以此来找到一个适合的名字。 如果它找不到名字, name 就被设置为 NULL 。
1.6 namewhat: 用于解释 name 域。 namewhat 的值可以是 "global", "local", "method", "field", "upvalue", 或是 "" (空串)。 这取决于函数怎样被调用。 (Lua 用空串表示其它选项都不符合。)
1.7 istailcall: 如果函数以尾调用形式调用,这个值就为真。 在这种情况下,当层的调用者不在栈中。
nups: 函数的上值个数。
nparams: 函数固定形参个数 (对于 C 函数永远是 0 )。
isvararg: 如果函数是一个可变参数函数则为真 (对于 C 函数永远为真)