Lua提供了xpcall函数,xpcall接收第二个参数——一个错误处理函数,当错误发生时,Lua会在调用桟展开(unwind)前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。 debug库提供了两个通用的错误处理函数: debug.debug:提供一个Lua提示符,让用户来检查错误的原因 debug.traceback:根据调用桟...
在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。 另一个实例我们经常需要调试函数的内的局部变量。我们可以使用 setupvalue 函数来设置这些局部变量。实例如下:实例 function newCounter () local n = 0 local k = 0 return function () k = n n = n...
我们首先来实现调用栈回溯打印接口printtraceback(),这个接口比较简单,只是简单地包装了一下debug.traceback(),对层级进行了一个修正,就不多介绍了。 -- 打印调用栈的一个回溯 local function printtraceback(level) -- 层次的默认值为1 -- 加上4是为了修正层次数以包含printtraceback, debug mainchunk, debug....
🌲一、Lua 调试(Debug) Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。 Lua 中 debug 库包含以下函数: 上表列出了我们常用的调试函数,接下来我们可以看些简单的例子: function myfunction () print(debug.traceback("Stack ...
Lua提供了xpcall函数,xpcall接收第二个参数——一个错误处理函数,当错误发生时,Lua会在调用桟展开(unwind)前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。 debug库提供了两个通用的错误处理函数: debug.debug:提供一个Lua提示符,让用户来检查错误的原因 debug.traceback:根据调用桟...
在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。 另一个实例我们经常需要调试函数的内的局部变量。我们可以使用 getupvalue 函数来设置这些局部变量。实例如下:实例 function newCounter () local n = 0 local k = 0 return function () k = n n = ...
debug.traceback([thread,] [message [, level]] 如果message 有,且不是字符串或 nil, 函数不做任何处理直接返回 message。 否则,它返回调用栈的栈回溯信息。 字符串可选项 message 被添加在栈回溯信息的开头。 数字可选项 level 指明从栈的哪一层开始回溯 (默认为 1 ,即调用 traceback 的那里)。 通俗点讲...
我们首先来实现调用栈回溯打印接口printtraceback(),这个接口比较简单,只是简单地包装了一下debug.traceback(),对层级进行了一个修正,就不多介绍了。 -- 打印调用栈的一个回溯 localfunctionprinttraceback(level) -- 层次的默认值为1 -- 加上4是为了修正层次数以包含printtraceback, debug mainchunk, debug.deb...
我们知道每个 lua 函数,或者 lua 发起 c 函数调用,都会有一个 CallInfo 与之对应,此时,CallInfo 就保存有 pcall 对应的luaB_pcall函数地址信息。虽然 longjmp 会破坏 c 函数堆栈,但却不会影响到子线程 CallInfo 链表。所以,我们通过debug.traceback回溯的其实是 CallInfo 链表。
发生错误时,Lua 会在调用栈展开前调用错误处理函数,就可以用debug库来获取错误的额外信息 debug 库的两个通用处理函数 debug.debug,提供一个 Lua 提示符,让用户检查错误的原因 debug.traceback,根据调用栈来构建一个扩展的错误消息 解释器程序使用debug.traceback来构建其错误消息 ...