Выявление причин вылетов без лога — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(grammar nazi edit) |
Skyloader (обсуждение | вклад) м |
||
Строка 27: | Строка 27: | ||
Вот, в принципе, и все. | Вот, в принципе, и все. | ||
+ | |||
+ | '''Автор статьи: SkyLoader''' | ||
[[Категория:Скрипты]] | [[Категория:Скрипты]] |
Версия 19:27, 18 июля 2011
Этот метод может помогать выявить некоторые стабильные или нестабильные (если у вас терпения хватит) безлоговые вылеты. Сам пользуюсь методом, часто помогает. Скажу сразу, этот метод только для скриптеров, остальные не поймут, что в логе написано. Итак, будем изменять функцию printf() в файле _g.script. Смотрим ее и приводим к следующему виду:
function printf(fmt,...) local con = get_console() con:execute(string.gsub(string.format(fmt,...), " ", "_")) con:execute("flush") end
Таким образом, в лог принудительно (flush) пишется (execute) вся информация, идущая в консоль в процессе игры.
Запускаем игру и играем/загружаем сейв. Игра будет тормозить, потому что в лог идет очень много информации. Делаем наше черное дело, при котором вылетаем, ну и ловим вылет. Смотрим лог и видим, что в нем осталось последнее действие.
После выявления вылета нам нужно все вернуть обратно, чтобы игра не тормозила и не засоряла лог. Просто закомментируем строки с execute, чтобы было так:
function printf(fmt,...) local con = get_console() --con:execute(string.gsub(string.format(fmt,...), " ", "_")) --con:execute("flush") end
Вот, в принципе, и все.
Автор статьи: SkyLoader