1

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

4

1 回答 1

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
于 2018-01-16T17:47:14.680 回答