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

Пример на GitHub.

Другие вопросы по тегам