Выявление причин вылетов без лога — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Выявление причин вылетов без лога — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Новая страница: «Этот метод может помогать выявить некоторые стабильные или нестабильные (если у вас терпе...»)
 
(grammar nazi edit)
Строка 1: Строка 1:
 
Этот метод может помогать выявить некоторые стабильные или нестабильные (если у вас терпения хватит) безлоговые вылеты. Сам пользуюсь методом, часто помогает. Скажу сразу, этот метод только для скриптеров, остальные не поймут, что в логе написано.
 
Этот метод может помогать выявить некоторые стабильные или нестабильные (если у вас терпения хватит) безлоговые вылеты. Сам пользуюсь методом, часто помогает. Скажу сразу, этот метод только для скриптеров, остальные не поймут, что в логе написано.
Итак, будем изменять ф-цию ''printf()'' в файле ''_g.script''. Смотрим ее и заменяем ее на такую ф-цию:
+
Итак, будем изменять функцию ''printf()'' в файле '''_g.script'''. Смотрим ее и приводим к следующему виду:
<code>
+
 
 +
<lua>
 
function printf(fmt,...)
 
function printf(fmt,...)
 
local con = get_console()
 
local con = get_console()
Строка 7: Строка 8:
 
con:execute("flush")
 
con:execute("flush")
 
end
 
end
</code>
+
</lua>
  
Запускаем игру и играем/загружаем сейв. Игра будет тормозить, потому что в лог идет очень много информации. Делаем наше черное дело, при котором вылетаем, ну и вылетаем. Смотрим лог и видим, что в логе осталось последнее действие.
+
Таким образом, в лог принудительно (''flush'') пишется (''execute'') вся информация, идущая в консоль в процессе игры.
 +
 
 +
Запускаем игру и играем/загружаем сейв. Игра будет тормозить, потому что в лог идет очень много информации. Делаем наше черное дело, при котором вылетаем, ну и ловим вылет. Смотрим лог и видим, что в нем осталось последнее действие.
  
 
----
 
----
  
 
После выявления вылета нам нужно все вернуть обратно, чтобы игра не тормозила и не засоряла лог. Просто закомментируем строки с ''execute'', чтобы было так:
 
После выявления вылета нам нужно все вернуть обратно, чтобы игра не тормозила и не засоряла лог. Просто закомментируем строки с ''execute'', чтобы было так:
<code>
+
 
 +
<lua>
 
function printf(fmt,...)
 
function printf(fmt,...)
 
local con = get_console()
 
local con = get_console()
Строка 20: Строка 24:
 
--con:execute("flush")
 
--con:execute("flush")
 
end
 
end
</code>
+
</lua>
 +
 
 
Вот, в принципе, и все.
 
Вот, в принципе, и все.
 +
 +
[[Категория:Скрипты]]

Версия 17:53, 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
 

Вот, в принципе, и все.

Другие места
LANGUAGE