如何在错误行自动打破lua程序

时间:2018-01-10 08:11:17

标签: zerobrane

我使用自己的解释器来运行lua程序并使用zerobrane进行调试。如果解释器遇到错误,如何让调试器在错误行中断?

1 个答案:

答案 0 :(得分:0)

Lua中没有允许捕获运行时错误的机制。在Lua 5.1中调用了debug.traceback函数,但在Lua 5.2+中不再调用它。如果你有自己的错误处理,你可以调用require("mobdebug").pause(),它将请求ZeroBrane Studio调试器在下一个可执行的Lua行停止,这将允许你至少看到堆栈跟踪和错误的位置,但这可能是你所能做的。您也可以尝试将debug.traceback分配给调用pause的函数,但同样,这只适用于Lua 5.1。

例如,尝试从IDE运行以下脚本:

require("mobdebug").start()
debug.traceback = function(...)
  print("traceback", ...)
  require("mobdebug").pause()
end
a()
print("done") -- it will never get here

如果将其保存到on-error.lua文件并运行,您应该看到执行在第5行(pause())调用后停止,并显示以下消息:

traceback   on-error.lua:6: attempt to call global 'a' (a nil value)    2