Перезапуск LUA-скрипта из-за ошибок

Страницы: 1
RSS
Перезапуск LUA-скрипта из-за ошибок
 
Каждый раз когда в скрипте случается ошибка, приходится останавливать скрипт через сервисы, и по новому его запускать.
Возможно ли  как-то сделать так, что бы выпала ошибка - обычно ее смотрю в окне "Доступные скрипты", отредактировал скрипт и он перезапустился или продолжил работу дальше?
Торговый привод на Lua http://iv-litovchenko.ru/
 
Что мешает написать такой скрипт самому? Все средства для этого есть.
 
Цитата
s_mike@rambler.ru написал:
Что мешает написать такой скрипт самому? Все средства для этого есть.
У меня получилось это сделать только для включаемых фаллов - пример:
Код
         -- Alert
         local callResult, result = pcall(dofile, getScriptPath().."\\Script.lua")
         if callResult then
            -- все в порядке, result это то, что вернула функция dofile
         else
            -- result это сообщение об ошибке
            message(tostring(result));
            sleep(5000);
         end;
Но как это сделать для всего скрипта в целом?
Торговый привод на Lua http://iv-litovchenko.ru/
 
Цитата
Иван написал:
Цитата
   s_mike@rambler.ru написал:
Что мешает написать такой скрипт самому? Все средства для этого есть.
У меня получилось это сделать только для включаемых фаллов - пример:  
Код
            -- Alert 
          local  callResult, result  =  pcall(dofile,  getScriptPath () .. "\\Script.lua")
          if  callResult  then 
             -- все в порядке, result это то, что вернула функция dofile 
          else 
             -- result это сообщение об ошибке 
             message (tostring(result));
             sleep ( 5000 );
          end ;
  
Но как это сделать для всего скрипта в целом?
Причем это включение идет в цикле while()
Торговый привод на Lua http://iv-litovchenko.ru/
 
Вы защитили только непосредственно тело включаемого скрипта, если он создаст какие-то функции и вы их потом вызовете из мейна например и будет ошибка в этой функции, она точно так же пролетит до квика. Заворачивать в pcall надо мейн и все колбеки, то есть ловить ошибки на границе с квиком. Ошибка при загрузке скрипта (типа синтаксической ошибки или не загрузилась длл) лучше вообще не ловить, пусть рушится, на этом этапе еще безопасно.
 
Цитата
Anton написал:
Вы защитили только непосредственно тело включаемого скрипта, если он создаст какие-то функции и вы их потом вызовете из мейна например и будет ошибка в этой функции, она точно так же пролетит до квика. Заворачивать в pcall надо мейн и все колбеки, то есть ловить ошибки на границе с квиком. Ошибка при загрузке скрипта (типа синтаксической ошибки или не загрузилась длл) лучше вообще не ловить, пусть рушится, на этом этапе еще безопасно.
Поясню что мне не очень удобно.
Когда скрипт падает - речь про весь скрипт, а не про те куски кода что обернул в dofile() - мне приходится закрывать созданную таблицу, снова открывать сервис, запускать скрипт, он создает таблицу, выравнивать ее, перемещать. Хотелось бы что бы исправил ошибку в файле Lua и он продолжил работу скажем через секунду.
Торговый привод на Lua http://iv-litovchenko.ru/
 
Цитата
Иван написал:
мне приходится закрывать созданную таблицу
Вот для этого и нужно ошибки на границе ловить, чтобы подчистить за скриптом все им созданное. Для этого в луа есть метаметоды __gc, но в квике при ошибке они не работают, баг пока еще не поправили. Поэтому придется извращаться с ловлей ошибок pcall'ом. Что же касается автоматического перезапуска, что-то мне не думается, что это здравая идея. Запустите вы скрипт тестировать одним контрактом и уйдете, он купит контракт - рухнет, перезапустится через секунду, купит еще один - рухнет, и так на все плечи. Лет 15 назад у меня еще из старого велса так скрипт потестировался. Благо в плюс по итогу, а могло бы и не в плюс. Если скрипт упал, то пусть лежит уже до выяснения причины, это не есть один из допустимых сценариев его работы.
 
Цитата
Anton написал:
Цитата
Иван написал:
мне приходится закрывать созданную таблицу
Вот для этого и нужно ошибки на границе ловить, чтобы подчистить за скриптом все им созданное. Для этого в луа есть метаметоды __gc, но в квике при ошибке они не работают, баг пока еще не поправили. Поэтому придется извращаться с ловлей ошибок pcall'ом. Что же касается автоматического перезапуска, что-то мне не думается, что это здравая идея. Запустите вы скрипт тестировать одним контрактом и уйдете, он купит контракт - рухнет, перезапустится через секунду, купит еще один - рухнет, и так на все плечи. Лет 15 назад у меня еще из старого велса так скрипт потестировался. Благо в плюс по итогу, а могло бы и не в плюс. Если скрипт упал, то пусть лежит уже до выяснения причины, это не есть один из допустимых сценариев его работы.
Да, пожалуй лучше так.
Торговый привод на Lua http://iv-litovchenko.ru/
Страницы: 1
Читают тему (гостей: 1)
Наверх