NLua处理c#异常

本文关键字:异常 处理 NLua | 更新日期: 2023-09-27 18:10:35

我正在寻找现有c#应用程序的NLua脚本,其中从lua调用的c#函数可能会抛出异常。

到目前为止,我找到了这个:

  • 如果lua代码没有处理调用的c#函数中的异常,NLua包装并重新抛出它,以便可以在c#级别处理。

  • 如果lua代码通过xpcall"捕获"异常,我发现没有办法访问异常的详细信息(例如-.Message)

前者允许我得到一个debug.traceback(),一个lua级别的stackdump,但是我没有得到异常的细节。后者提供了异常,但没有办法获得Lua堆栈转储(我在. source中获得Lua文件和行,但这还不够)。

问题是:

  • 我可以在NLua"xpcall"错误处理程序中获得c#异常的详细信息吗?

  • 或者,我可以处理一个c#异常在NLua(与创建lua堆栈转储的意图)和重新抛出它?

  • 或者我可以得到一个lua堆栈转储从某种程度上从"lua状态"时,例如luastate . dofile("myScript.lua")导致异常?

任何帮助都会很感激。NLua似乎对我的想法近乎完美,如果我能整理异常处理。

NLua处理c#异常

您需要从脚本中使用pcall。NLua将包装异常并返回pcall返回的第二个值。

error, exception = pcall (someFunction)
if (not error) then
    print(exception.Message)
end