【发布时间】:2012-09-17 04:44:43
【问题描述】:
我不知道如何有效地调试脚本。我需要像 Python 那样的堆栈输出,但默认情况下 Lua/C 没有这个。我不知道如何启用它。或者简单地说,如何从脚本中获取错误输出?
【问题讨论】:
标签: lua
我不知道如何有效地调试脚本。我需要像 Python 那样的堆栈输出,但默认情况下 Lua/C 没有这个。我不知道如何启用它。或者简单地说,如何从脚本中获取错误输出?
【问题讨论】:
标签: lua
您可能正在寻找 xpcall 和 debug.traceback 的组合。您可以使用 xpcall 向其传递错误处理程序并使用 debug.traceback 来获取堆栈跟踪:
function functionThatMayFail()
error('Failed')
end
local success, result = xpcall(functionThatMayFail,
function(err) return debug.traceback(err) end)
print(success, result)
此代码将打印:
false xpcall.lua:2: Failed
stack traceback:
xpcall.lua:6: in function <xpcall.lua:6>
[C]: in function 'error'
xpcall.lua:2: in function <xpcall.lua:1>
[C]: in function 'xpcall'
xpcall.lua:5: in main chunk
[C]: ?
【讨论】:
Lua 解释器默认会产生错误输出。例如。 (我在这个脚本中引入了一个错字):
$ lua random.lua
lua: random.lua:6: attempt to call global 'xists' (a nil value)
stack traceback:
random.lua:6: in main chunk
[C]: ?
就错误输出而言,您能否澄清您正在尝试做的事情,或者更好的是您预期不会发生的事情?
【讨论】: