1

我正在寻找 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 似乎对我的想法近乎完美。

4

1 回答 1

3

你需要pcall从你的脚本中使用。NLua 将包装异常并返回由pcall.

error, exception = pcall (someFunction)

if (not error) then
    print(exception.Message)
end

GitHub 上的示例

于 2015-09-01T20:19:18.020 回答