【问题标题】:Get Lua runtime errors inside the script在脚本中获取 Lua 运行时错误
【发布时间】:2012-09-17 04:44:43
【问题描述】:

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

【问题讨论】:

    标签: lua


    【解决方案1】:

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

    【讨论】:

    • 如何处理具有多个参数的函数?
    • 我正在使用带有匿名函数的 xpcall(让它调用其他函数)。它现在完全符合我的要求。谢谢!
    • 有点晚了,但你甚至不需要那个内部函数。 function functionThatMayFail() error('Failed') end local success, result = xpcall(functionThatMayFail, debug.traceback) print(success, result) See the last example at Nick Gammon's nice documentation about LUA.
    【解决方案2】:

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

    就错误输出而言,您能否澄清您正在尝试做的事情,或者更好的是您预期不会发生的事情?

    【讨论】:

    • 这对我不起作用,因为我在主程序中为我的函数实现了一个包装器。它不能在程序本身之外使用。有时会同时出现太多错误,大部分都很容易解决,所以没必要贴出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2021-11-27
    • 2016-03-29
    • 1970-01-01
    • 2016-06-19
    • 2015-08-30
    相关资源
    最近更新 更多