догадываюсь о грубейшем способе замены функций error и assert, но это ж прям такое... Нужно просто чтобы при возникновении паники, оно не в stdout уходило, а куда надо нам.
Может и в stder, я просто никогад кода выхода не проверял
А может лучше разобраться почему паника возникает в первую очередь? Либо вы интерпретатор корраптите, многопотоком или неправильным обращением к памяти в приложении в целом, либо C API вызывает луа код через lua_call а не lua_pcall в начале Или вы под паникой не это подразумеваете, а просто ошибку?
Да, под паникой я подозревал любое возникновение ошибки. Это и error, и assert, и warn
Тогда ваш main.lua (или чтобы оно там ни было) вызывайте не напрямую, а через скрипт обёртку ака -- start.lua local stat, msg = xpcall(require, debug.traceback, "main") -- имя скрипта if not stat then print(msg) -- можно и не печатать, а сделать что-то другое с сообщением return -1 end
Идея интересная. Спасибо, приму к сведению. Мне, правда, в данном случае нужно просто перехватить ошибки из метатаблиц, плевав на трейсбэки. Но, по сути, никто не мешает завернуть вызов функции, которая дергает все это добро, в xpcall.
Если трейсбек не нужен, то просто pcall без аргумента debug.traceback
Да-да. Мне нужно просто чтобы ошибка печаталась в поле гуя.
Обсуждают сегодня