gpt4 book ai didi

c# - Lua:在没有全局方法的情况下获取堆栈跟踪

转载 作者:行者123 更新时间:2023-11-30 16:04:19 26 4
gpt4 key购买 nike

在使用 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 调用失败后打印堆栈跟踪,而不必向最终用户公开调试表?

最佳答案

调用luaL_traceback :

void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, int level);

Creates and pushes a traceback of the stack L1. If msg is not NULL it is appended at the beginning of the traceback. The level parameter tells at which level to start the traceback.

您可能想使用 L1=L。查看source lua.c 的使用示例。

关于c# - Lua:在没有全局方法的情况下获取堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com