NLua обрабатывает исключения C#
Я смотрю на NLua для написания сценариев для существующего приложения C#, где функции C#, вызываемые из lua, могут выдавать исключения.
Пока я нашел это:
Если код lua не обрабатывает исключение в вызываемой функции C#, NLua переносит и перебрасывает его, чтобы его можно было обработать на уровне C#.
Если код lua "перехватывает" исключение через xpcall, я не нашел способа получить доступ к деталям исключения (например, -.Message)
Первый позволяет мне получить debug.traceback(), стековый дамп уровня lua, но я не получаю детали исключения. Последнее обеспечивает исключение, но не позволяет получить стековый дамп Lua (я получаю файл lua и строку в.Source, но этого недостаточно).
Вопрос в том:
Могу ли я получить подробности об исключении C# в обработчике ошибок NLua "xpcall" (? По крайней мере, в поле.Message, еще лучше в действительном типе исключения).
Или я могу обработать исключение C# в NLua (с целью создания lua stackdump) и повторно его выбросить?
Или я могу получить lua stackdump как-то из "состояния lua", когда egluaState.DoFile("myScript.lua") вызывает исключение?
Любая помощь будет оценена. NLua кажется почти идеальным для того, что я имею в виду, если бы я мог только разобраться с обработкой исключений.
1 ответ
Вам нужно использовать pcall
из вашего сценария. NLua обернет исключение и вернет второе значение, возвращенное pcall
,
error, exception = pcall (someFunction)
if (not error) then
print(exception.Message)
end