NLua 处理 C# 异常
NLua handling C# Exceptions
我正在查看 NLua 以编写现有 C# 应用程序的脚本,其中从 lua 调用的 C# 函数可能会引发异常。
到目前为止,我发现了这个:
如果 lua 代码 没有 处理调用的 C# 函数中的异常,NLua 换行并重新抛出这样它就可以在 C# 级别处理。
如果 lua 代码 做 "catch" 通过 xpcall 的异常,我发现无法访问异常的详细信息(例如-.Message)
前者允许我得到一个debug.traceback(),一个lua级的stackdump,但我没有得到异常的细节。
后者提供了例外,但无法获得 Lua stackdump(我在 .Source 中得到 lua 文件和行,但这还不够)。
问题是:
我能否在 NLua "xpcall" 错误处理程序中获取 C# 异常的详细信息(?至少是 .Message 字段,实际异常类型更好。
或者,我可以处理 NLua 中的 C# 异常(目的是创建 lua 堆栈转储)并重新抛出它吗?
或者当 e.g.luaState.DoFile("myScript.lua") 导致异常时,我可以从 "lua state" 以某种方式获得 lua stackdump 吗?
如有任何帮助,我们将不胜感激。 NLua 对于我的想法来说似乎近乎完美,如果我只能解决异常处理的话。
您需要使用脚本中的 pcall
。 NLua 会将异常和 return 包装在由 pcall
编辑的第二个值 return 上。
error, exception = pcall (someFunction)
if (not error) then
print(exception.Message)
end
我正在查看 NLua 以编写现有 C# 应用程序的脚本,其中从 lua 调用的 C# 函数可能会引发异常。
到目前为止,我发现了这个:
如果 lua 代码 没有 处理调用的 C# 函数中的异常,NLua 换行并重新抛出这样它就可以在 C# 级别处理。
如果 lua 代码 做 "catch" 通过 xpcall 的异常,我发现无法访问异常的详细信息(例如-.Message)
前者允许我得到一个debug.traceback(),一个lua级的stackdump,但我没有得到异常的细节。 后者提供了例外,但无法获得 Lua stackdump(我在 .Source 中得到 lua 文件和行,但这还不够)。
问题是:
我能否在 NLua "xpcall" 错误处理程序中获取 C# 异常的详细信息(?至少是 .Message 字段,实际异常类型更好。
或者,我可以处理 NLua 中的 C# 异常(目的是创建 lua 堆栈转储)并重新抛出它吗?
或者当 e.g.luaState.DoFile("myScript.lua") 导致异常时,我可以从 "lua state" 以某种方式获得 lua stackdump 吗?
如有任何帮助,我们将不胜感激。 NLua 对于我的想法来说似乎近乎完美,如果我只能解决异常处理的话。
您需要使用脚本中的 pcall
。 NLua 会将异常和 return 包装在由 pcall
编辑的第二个值 return 上。
error, exception = pcall (someFunction)
if (not error) then
print(exception.Message)
end