LuaSTG-x Core API
|
Classes | |
class | DebugInfo |
Public Member Functions | |
static function | debug () |
static function | getfenv (local o) |
static function | gethook (local thread) |
static function | getinfo (local thread, local f, local what) |
static function | getlocal (local thread, local f, local var) |
static function | getmetatable (local value) |
static function | getregistry () |
static function | getupvalue (local f, local up) |
static function | setfenv (local object, local table) |
static function | sethook (local thread, local hook, local mask, local count) |
static function | setlocal (local thread, local level, local var, local value) |
static function | setmetatable (local value, local table) |
static function | setupvalue (local f, local up, local value) |
static function | traceback (local thread, local message, local level) |
调试库提供了 Lua 程序调试接口的功能。
其中一些函数违反了 Lua 代码的基本假定
(例如,不会从函数之外访问函数的局部变量;
用户数据的元表不会被 Lua 代码修改;Lua 程序不会崩溃),
因此它们有可能危害到其它代码的安全性。
此外,库里的一些函数可能运行的很慢。
这个库里的所有函数都提供在表 debug
内。
所有操作线程的函数,可选的第一个参数都是针对的线程。
默认值永远是当前线程。
进入一个用户交互模式,运行用户输入的每个字符串。
使用简单的命令以及其它调试设置,用户可以检阅全局变量和局部变量,
改变变量的值,计算一些表达式,等等。
输入一行仅包含 cont
的字符串将结束这个函数,
这样调用者就可以继续向下运行。
注意,debug.debug
输入的命令在文法上并没有内嵌到任何函数中,
因此不能直接去访问局部变量。
返回三个表示线程钩子设置的值:
当前钩子函数,当前钩子掩码,当前钩子计数
(debug.sethook
设置的那些)。
thread | thread |
返回关于一个函数信息的表。
你可以直接提供该函数,
也可以用一个数字 f
表示该函数。
数字 f
表示运行在指定线程的调用栈对应层次上的函数:
0 层表示当前函数(getinfo
自身);
1 层表示调用 getinfo
的函数
(除非是尾调用,这种情况不计入栈);等等。
如果 f
是一个比活动函数数量还大的数字,
getinfo
返回 **nil**。
只有字符串 what
中有描述要填充哪些项,
返回的表可以包含 lua_getinfo
能返回的所有项。
what
默认是返回提供的除合法行号表外的所有信息。
对于选项 'f
' ,会在可能的情况下,增加
func
域保存函数自身。
对于选项 'L
' ,会在可能的情况下,增加
activelines
域保存合法行号表。
例如,表达式 debug.getinfo(1,"n")
返回带有当前函数名字信息的表(如果找的到名字的话),
表达式 debug.getinfo(print)
返回关于 print
函数的
包含有所有能提供信息的表。
thread | thread |
f | function |
what | string |
此函数返回在栈的 f
层处函数的索引为 local
的局部变量
的名字和值。
这个函数不仅用于访问显式定义的局部变量,也包括形参、临时变量等。
第一个形参或是定义的第一个局部变量的索引为 1 ,
然后遵循在代码中定义次序,以次类推。
其中只计算函数当前作用域的活动变量。
负索引指可变参数;
-1 指第一个可变参数。
如果该索引处没有变量,函数返回 **nil**。
若指定的层次越界,抛出错误。
(你可以调用 debug.getinfo
来检查层次是否合法。)
以 '(
' (开括号)打头的变量名表示没有名字的变量
(比如是循环控制用到的控制变量,
或是去除了调试信息的代码块)。
参数 f
也可以是一个函数。
这种情况下,getlocal
仅返回函数形参的名字。
thread | thread |
f | table |
var | string |
返回给定 value
的元表。若其没有元表则返回 nil 。
value | table |
static function getregistry | ( | ) |
返回注册表。
此函数返回函数 f
的第 up
个上值的名字和值。
如果该函数没有那个上值,返回 nil 。
以 '(
' (开括号)打头的变量名表示没有名字的变量
(去除了调试信息的代码块)。
f | number |
up | number |
Sets the environment of the given object to the given table. Returns object.
@generic T
object | T |
table | table |
将一个函数作为钩子函数设入。
字符串 mask
以及数字 count
决定了钩子将在何时调用。
掩码是由下列字符组合成的字符串,每个字符有其含义:
**'c`** : 每当 Lua 调用一个函数时,调用钩子;
**'r'** : 每当 Lua 从一个函数内返回时,调用钩子;
**'l'** : 每当 Lua 进入新的一行时,调用钩子。
此外,传入一个不为零的 count
,
钩子将在每运行 count
条指令时调用。
如果不传入参数,
debug.sethook
关闭钩子。
当钩子被调用时,
第一个参数是触发这次调用的事件:
"call"
(或 "tail call"
),
"return"
,"line"
, "count"
。
对于行事件,钩子的第二个参数是新的行号。
在钩子内,你可以调用 getinfo
,指定第 2 层,
来获得正在运行的函数的详细信息
(0 层指 getinfo
函数,1 层指钩子函数)。
thread | thread |
hook | fun():any |
mask | string |
count | number |
这个函数将 value
赋给
栈上第 level
层函数的第 local
个局部变量。
如果没有那个变量,函数返回 nil 。
如果 level
越界,抛出一个错误。
(你可以调用 debug.getinfo
来检查层次是否合法。)
否则,它返回局部变量的名字。
关于变量索引和名字,参见 debug.getlocal
。
thread | thread |
level | number |
var | string |
value | any |
将 value
的元表设为 table
(可以是 **nil**)。
返回 value
。
value | any |
table | table |
这个函数将 value
设为函数 f
的第 up
个上值。
如果函数没有那个上值,返回 nil 。
否则,返回该上值的名字。
f | fun():any |
up | number |
value | any |
如果 message
有,且不是字符串或 **nil**,
函数不做任何处理直接返回 message
。
否则,它返回调用栈的栈回溯信息。
字符串可选项 message
被添加在栈回溯信息的开头。
数字可选项 level
指明从栈的哪一层开始回溯
(默认为 1 ,即调用 traceback
的那里)。
thread | thread |
message | string |
level | number |