我使用自己的解释器来运行 lua 程序并使用 zerobrane 进行调试。如果解释器遇到错误,如何让调试器在错误行中断?
问问题
374 次
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 回答