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