【发布时间】:2016-05-12 10:15:26
【问题描述】:
在使用 Lua 进行扩展的游戏中,当脚本中抛出错误时,我想向用户显示错误日志,即错误消息和堆栈跟踪,有点像这样:
if (lua_pcall(L, nargs, nresults, 0) != 0) log.printline(lua_tostring(L, -1));
不过,这只会打印错误消息,而不是调用堆栈。
我知道我可以使用debug.traceback,即通过 API 从调试表中获取函数,然后调用它,但出于安全考虑,我根本不想加载调试表,即允许恶意用户编写脚本来破坏系统和其他全局表。 (出于同样的原因,我不加载 io 而是公开我自己的函数。)
我没有使用任何类型的网桥,我通过 P/Invoke 直接使用 Lua API。
如何在lua_pcall 调用失败后打印堆栈跟踪,而不必向最终用户公开调试表?
【问题讨论】:
-
你总是可以对 Lua 进行沙盒处理,因为我不相信还有其他方法。
-
除非 xpcall 能帮上忙(?)我没怎么搞砸
-
您不必为了访问
debug.traceback而加载整个调试库。