我正在寻找 NLua 来编写现有 C# 应用程序的脚本,其中从 lua 调用的 C# 函数可能会引发异常。
到目前为止,我发现了这个:
如果 lua 代码在调用的 C# 函数中没有处理异常,NLua 会包装并重新抛出它,以便在 C# 级别处理它。
如果 lua 代码确实通过 xpcall “捕获”异常,我发现无法访问异常的详细信息(例如 -.Message)
前者允许我得到一个 debug.traceback(),一个 lua 级的堆栈转储,但我没有得到异常的详细信息。后者提供了例外,但无法获得 Lua 堆栈转储(我在 .Source 中获得 lua 文件和行,但这还不够)。
问题是:
我可以在 NLua“xpcall”错误处理程序中获取 C# 异常的详细信息吗(?至少是 .Message 字段,更好的是实际异常类型。
或者,我可以在 NLua 中处理 C# 异常(目的是创建 lua stackdump)并重新抛出它吗?
或者当 egluaState.DoFile("myScript.lua") 导致异常时,我可以从“lua state”以某种方式获取 lua stackdump 吗?
任何帮助,将不胜感激。如果我能理清异常处理,NLua 似乎对我的想法近乎完美。