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

时间:2012-09-16 15:07:33

标签: lua

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

2 个答案:

答案 0 :(得分:6)

您可能正在寻找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]: ?

答案 1 :(得分:0)

默认情况下,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]: ?

在错误输出方面,你能澄清你想要做什么,或者更好的是你预期会发生什么?