在脚本中获取Lua运行时错误。

我不知道如何高效地调试脚本。我需要类似 Python 的堆栈输出,但默认情况下 Lua/C 没有这个功能。我不知道如何启用它。或者说,如何从脚本中获取错误输出?

点赞
用户26702
用户26702

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]: ?

您能否澄清您试图做什么或者更重要的是,关于错误输出没有发生您期望的事情是什么?

2012-09-16 15:13:19
用户1442917
用户1442917

你可能正在寻找结合 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]: ?
2012-09-16 20:44:43